String不可改变的原因

String s1="123abc";
String s2="123abc";
System.out.println(s1==s2);

代码中的"=="的意思是比较自变量s1和s2的地址.
但是在Java中为了节约空间加快运行速度所以将s1和s2的的值放在堆中的同一空间,即s1,s2指向同一个对象
结果为:true

String s3=new String("123abc");
System.out.println(s1==s3);
System.out.println(s1.equal(s3));

结果:
false
true

因为equal方法是比较s1和s3的内容结果自然是true
而s3是再次new出来的一个对象所以地址一定不同,所以为false


由此可见在Java中多个相同的String是共同占用同一个空间的,既然该空间是多"人"共用的,所以是不可以更改的.
如果非要改变,可以用如下方法

s1=s1+"def";
System.out.println(s1==s2);

结果为false

int a=3+1;

编译器有一个优化措施:
当一个计算表达式计算符号两边都是字面量时编译器会直接将结果计算出来并代替原来的表达式,所以JVM在运行class文件时,看到的下面代码被编译器改成了:

int a=4;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值