public static void main(String[] args) {
String str = "man:";
StringBuffer sb = new StringBuffer("man:");
new TestValue().getString(str);
new TestValue().getString(sb);
System.out.println(str);
System.out.println(sb.toString());
}
public void getString(String str) {
str = "hello";
}
public void getString(StringBuffer str) {
str.append("hello");
}
}
结果:
man:
man:hello
传入的string 在传入 getString 并没有被改变,打印的结果仍然是 man: 但是传入的stringbuffer则可以看出改变了sb引用中对应的值,网上的解释是 String对象为final,一旦赋值则不可改变,我传入的str(String对象)其实是一个新的,并不像传入的stringbuffer的引用,但是我发现stringbuffer对象也是final对象阿,怎么解释?
而你的String str1 = "abc";
你传递到另一个方法的执行str1 = "yyy";是将str1的指针改了,指向"yyy",
记住一点所有的方法里传的对象也好,集合也好全都是值类型,通过属性或方法改变他的值是可以,
如:${变量名}.setXXX = "ddd";
或调用别的set方法,都是在改变这个对象的值,其引用还是那一个没变。
如果你拿 ${变量名} = yyy;这肯定没戏,你是在改引用
String是常量
你在法方中修改String对象 只是生产一个新的String常量
这位仁兄:请你记住:String 特性是什么?
只要定义是不可改变的。如果对于做了操作那么它将会产生一个新的对象。
public void getString(String str) {
str = "hello";
}
这个str 跟他在main 方法中定义的 str 是没有一点关系的,这里的str只是一个局部变量。
你原的 str --- > 指向的还是 “man”
http://www.haoxianggo.com