猿问

java引用传递的问题

classDemo{
Stringtemp="hello";//此处为了方便,属性暂时不封装
};
publicclassRefDemo03{
publicstaticvoidmain(Stringargs[]){
Demod1=newDemo();//实例化Demo对象,实例化之后里面的temp="hello"
d1.temp="world";//修改temp属性的内容
System.out.println("fun()方法调用之前:"+d1.temp);
fun(d1);
System.out.println("fun()方法调用之后:"+d1.temp);
}
publicstaticvoidfun(Demod2){//此处的方法由主方法直接调用
d2.temp="123";//修改temp值
}
};
第一个问题:
d1.temp="world";//修改temp属性的内容
这段代码是不是生成了一个匿名对象"world",然后d1.temp指向它,"hello"变成了垃圾?
第二个问题:
fun()方法调用之后输出的结果是123
不是说“因为String为一个特殊的类,其内容不能改变”吗?
那temp到底是Demo的一个属性还是Demo里面的一个内部类呢?
为什么d2指向d1的堆内存后可以改变d1里面的String类型的值呢?是不是也像上面的代码一样,先生成匿名对象"123",之后"world"变成垃圾?
慕容3067478
浏览 324回答 2
2回答

幕布斯7119047

String的不可变性是说一旦字符串被创建,对其所做的任何修改都会生成新的字符串对象。例子如下publicstaticvoidmain(String[]args){Stringa="aaa";//当a发生变化时,返回新的字符串Stringb=a.toUpperCase();System.out.println("a:"+a);System.out.println("b:"+b);System.out.println("a==b:"+(a==b));//当a不发生变化时,不返回新字符串。Stringc=a.toLowerCase();System.out.println("c:"+c);System.out.println("a==c:"+(a==c));}运行结果:a:aaab:AAAa==b:falsec:aaaa==c:true
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答