String s = new String("hello ");changeString(s);//changeString() 给s赋一个新的值System.out.println(s);书上给的解释是 对象引用指向的 字符串s 永远不会改变。传递对象引用,通过这个引用去创建了 一个新的 String 类型的字符串
解决方案 »
- 用NetBeans IDE 6.9.1生成的.class文件为什么不能运行?
- java里面的强制类型转换,都会有异常处理么?
- Generated servlet error:Invalid character constant
- s1 += 1和s1 = s1 + 1的区别
- JAVA中怎么往文件中加入ArrayList(我是菜鸟,希望大家帮帮我)
- 一个菜鸟的问题--在JAVA中如何打开一个带参数的网页
- 小女子求帮助,谢谢~
- 小弟有几个关于网络程序的问题要急于解决,请高手帮忙~!
- String 拆分出错,求帮助!
- 请问Vector类在哪个包里?
- java中socket编程自定义tcp数据包结构等
- 运行程序无反应?不知问题出在那了?帮忙看一下
所以不管你changeString(s)究竟做了什么,都是对其副本进行的操作,该操作对于储存在堆栈中的源数据没有任何影响。
String s = new String("小王");
changeString(s); //该步 完成的动作是把s的地址值 传给了changeString方法中的形参s
// 而并没有将原s的指向改变。所以最后的结果还是小王 System.out.println(s);
}
//定义方法,重新给s赋值
public static String changeString(String s){
s = "小张";
return s;
}
}解释不对的地方请大家指教。
是在字符池里创建一个属于S,存放“hello”的固定长度的块
String 定义的变量是不可变长度的,StringBuffer 才可以变化。
大概就是这个意思。不知道说明白了没。
如果想引用的话,可以用类
举例
class mystring{
String str;
}
主函数
String s=new String("hello");
mystring mystr=new mystring();
mystr.str=s;
changeString(mystr);//changeString() 给s赋一个新的值
s=mystr.str;
System.out.println(s);
所以,这个在这儿string不是引用类型变量,仅是一个具体的值,所以在传递的过程不会改变的。