在方法内部对String类型的变量的重新赋值操作并没有对这个变量的原型产生任何影响。?
在Java中,当基本类型作为参数传入方法时,无论该参数在方法内怎样被改变,外部的变量原型总是不变的,
当方法传入的参数为非基本类型时(也就是说是一个对象类型的变量),方法改变参数变量的同时变量原型也会随之改变:
String的问题所在:
字符串直接赋值时,String类型的变量所引用的值是存储在类的常量池中的。因为”original”本身是个字符串常量,另一方面String是个不可变类型,所以这个String类型的变量相当于是滴对一个常量的引用。这种情况下,变量的内存空间大小是在编译期就已经确定的。
而new对象的方式是将”original”存储到String对象的内存空间中,而这个存储动作是在运行期进行的。在这种情况下,Java并不是把”original”这个字符串当作常量对待的,因为这时它是作为创建String对象的参数出现的。
别人:
源代码中String 是根据char[] 来进行操作的,因此 其实使用的是基本类型传递了。(Integer 等也有此情况)
public String(String original) {
int size = original.count;
char[] originalValue = original.value;
char[] v;
。。。。。。。。
我认为
例子:
public class Mytest{
public static void main(String args[]){
Mytest m = new Mytest();
number b=new number();
m.change(b);
System.out.println(b.a);
}
public void change(number b){
number c= new number(3,5);
b=c;
System.out.println(b.a);
}
}
class number{
int a=1;
int b=2;
public number(int a,int b){
this.a=a;
this.b=b;
}
public number(){
}
}
这里输出的是:
可以这样理解:3,1 我们看到 形参中的值改变了,但是main中实参的值没有改变。 原因便是:在方法中形参的引用 改变了。而不是引用的值改变了。
String也是类似的,我们改变了String的引用,这时已经形参实参脱轨了,所以形参的改变都不会对应到实参。 本质原因:没有改变里面对应的值