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;