java中数组的取值问题

private String[] hobbys;
public String[] getHobbys() {
System.out.println(this.hobbys[0]);//取不到值
return hobbys;
}
public void setHobbys(String[] hobbys) {

this.hobbys = hobbys;

System.out.println(this.hobbys[0]);//可以取到
}
先set数组 调用public void setHobbys(String[] hobbys)可以显示出this.hobbys[0]的值
再get数组 调用public void getHobbys()取不到this.hobbys[0]的值为null

经过测试,结果不是如你所说。两次都取到了。

public class T{
public static void main(String argv[]){
T t = new T();
t.setHobbys(new String[]{"1", "2", "3"});
t.getHobbys();
}

private String[] hobbys;
public String[] getHobbys() {
System.out.println(this.hobbys[0]);//也可以取到
return hobbys;
}
public void setHobbys(String[] hobbys) {
this.hobbys = hobbys;
System.out.println(this.hobbys[0]);//可以取到
}
}

javac -encoding UTF-8 T.java
Process started >>>
<<< Process finished.
java T
Process started >>>
1
1
<<< Process finished.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-16
在Java中数组的定义要首先给它们分配一个预定的空间,当你用注释的那一句话时,就给数组b在电脑的内存中先申请了一个存储空间,所以你用e来测试它时就显示了数组b的值;当你把注释的一句话给去掉的话,就没给b申请一个空间,只是一个值而已,只是在E类中有用,出了类E就不能调用了,所以运行的结果就是a[3]原来的值了。
第2个回答  2012-04-08
String[] hobbys=null;//声明数组
hobbys=new String[3];//没有这一步 开辟空间
this.hobbys[0] -->null;
直接调用get方法,数组只声明了,
并没有开辟空间,也就是没有使用hobbys=new String[3];//开辟空间 ,当然就指向为空了,所以get返回为null
但是set方法从外部传入了数组并给与hobbys 所以可以取到了;
如:
String[] hobbys=null;//声明数组
hobbys=外部传入的数组;//不再为空
this.hobbys[0] --> 外部数组的[0]地址
第3个回答  2019-09-01
因为如果去掉注释的话,那么就在E的eTest函数空间中创建了局部变量a,那么对a的赋值就不会影响到T中。
否则对E中就是对a的引用,那么对a的赋值就会影响到T中的a了。
第4个回答  2019-12-17
首先,传到E中的数组a[]就是T中的数组a[];没有注释时a[3]=3;就是相当于改变了T中的a[3],加了注释的话就是再E中新建一个数组,改变这个数组与原数组就没有关系了,所以这时a[3]还是原来的5。。。。