String str="test"
调用run方法传入str
SOP( str);
run(string str){
Str ="test2"
}
问题 String作为引用数据类型传递为什么值不改变。
无论什么类型,简单也好,引用也好,java中参数都不会改变作用到实参(调用者)
但是引用类型,可以改变对象状态。(改变对象状态不等同于改变对象,后者指将引用指向一个新的对象)
而string又是不可变[immutable]的
因为在run方法中,str值改变了,str指向了新的引用。相当于str = new String();str只是指向了新的引用,并没有改变原来的引用的内容。
比如你在run方法中传User对象参数user,你如果是在里面user = new User();等于把user指向了另一个对象的引用,而没有改变原来引用的内容。
如果是你在run方法中user.set();重新赋值,并没有改变user所指向的引用,还是指向原来的引用只不过是内容发生了变化,那么原来引用的内容就发生了变化。
String,Integer类型的对象,值发生改变,就会指向不同的引用,相当于重新new了一个对象。跟其他的引用类型有所不同。