这个String str为什么没变??
public class Example{
static String str=new String("good");
static char[] ch={'a','b','c'};
static byte a=120;
public void change(String str,char ch[]){
str="test Ok";
ch[0]='g';
}
public static void main(String[] args){
Example ex=new Example();
ex.change(str,ch);
System.out.print(Example.str+" and ");
System.out.print(Example.ch);
}
}
String传参传的是地址,为什么输出地不是test Ok 呢?费解中....
------解决方案--------------------static 静态变量,.............
------解决方案--------------------请去看String的源码。
java中的String狠特别,方法内部改变不了它的引用
------解决方案--------------------值传递
不是传的地址进去;
------解决方案--------------------你的这个赋值是给本方法的参数str赋值,并不是给全局变量str赋值
str="test Ok";
应改为:this.str = "test Ok";
------解决方案--------------------str="test ok"这句是改变引用的指向而已,并不是改变str之前所指向的对象的值。
str是一个局部变量,它的指向改变了影响不到ex.str的值,str还是指向new String("good"),这个画个图很容易理解。
------解决方案--------------------值传递与引用传递,基本数据类型,静态变量
------解决方案--------------------
String应该是引用类型吧...
迷茫了..
------解决方案--------------------java 方法参数传递不是地址传递,是值传递。
------解决方案--------------------5楼正解。
------解决方案--------------------
引用也只是传的引用的值即(引用所指的地址)
你可以通过这个地址去改变这个地址空间中的属性值
但你无法让原引用的指向改变
------解决方案--------------------change方法里面的str不是类的字段str~而是传进来的参数str,如果你加个this.就可以了
------解决方案--------------------很明显,在此处String传进去的是Str的一个副本,穿进去的是值。儿Char数组ch本身存放的就是char数组的首地址,所以传进去的是ch的首地址,必然会导致String结果不变,而Char数组的值发生改变。
------解决方案--------------------
这是一个错误的认识,就算你把属性名改成和参数名不同结果还是一样的。
------解决方案--------------------