日期:2014-05-20  浏览次数:20730 次

这个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楼正解。
------解决方案--------------------
引用:
引用:
值传递
不是传的地址进去;

String应该是引用类型吧...
迷茫了..

引用也只是传的引用的值即(引用所指的地址)
你可以通过这个地址去改变这个地址空间中的属性值
但你无法让原引用的指向改变
------解决方案--------------------
change方法里面的str不是类的字段str~而是传进来的参数str,如果你加个this.就可以了
引用:
不好意思应该是这个
public class Example{ 
  String str=new String("good"); 
  char[]ch={'a','b','c'}; 
  public static void main(String args[]){ 
    Example ex=new Example(); 
    ex.change(ex.str,ex.ch……

------解决方案--------------------
很明显,在此处String传进去的是Str的一个副本,穿进去的是值。儿Char数组ch本身存放的就是char数组的首地址,所以传进去的是ch的首地址,必然会导致String结果不变,而Char数组的值发生改变。
------解决方案--------------------
引用:
public void change(String str,char ch[]){  
    str="test ok";  
    ch[0]='g';  
  }  
明白了,问题出在了参数名与类的属性名相同上了.不过,String是引用类型吧??,传的应该是地址吧??


这是一个错误的认识,就算你把属性名改成和参数名不同结果还是一样的。
------解决方案--------------------
引用:
public void change(String str,char ch[]){  
    str="test ok";  
    ch[0]='g';  
  }