String s1="爱慕课";
String s2="爱慕课";
System.out.println(s1==s2);
为什么s1==s2是true???不是地址不同吗
字符串可以说在被创建后便是一个常量,内容不可更改。
更改的话相当于变相创建了一个新的字符串。
s1创建了一个字符串为imooc,将这个常量保存在了内存里。
创建s2时,由于s2创建的内容和s1一样,所以s2并没有在内存中创建一个新的字符串,而是指向s1所创字符串的内存地址,所以s1和s2指向的是同一个常量,s1=s2。
s3是在s1的基础上创建了一个新的字符串I love imooc,创建时开辟了新的内存地址
s4同理,也是在s1上创建了新的字符串。
字符串之间的比较,是比较内存首地址是否相同,而不是内容。
所以s1和s2在内存的指向上是相同,而s3和s4是各自新开辟的字符串,事先建立的字符串后付的值,所以s3和s4指向的内容并不是一个,所以内存地址不同,从而不相等
这个是放在栈里面的,比较的直接是数值,也就是里面的内容。若是放在堆里面的就是地址值,就是假仅供参考