为了账号安全,请及时绑定邮箱和手机立即绑定

java引用传递的问题

java引用传递的问题

慕容3067478 2019-04-13 08:46:35
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"变成垃圾?
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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:aaa
b:AAA
a==b:false
c:aaa
a==c:true
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信