String b = "123";
创建了一个值为123
的字符串比较问題对象, 并将变量b
指向123
字符串比较问题对象所在的地址.
String c = "123";
检测到之前的字符串比较问题对象123
在常量池内, 直接将变量c
指向常量池中已有的123
的地址.
此时c==b
为true
, 因为b
和c
都指向同一个常量池内的123
地址.
大概就是这样. 应该.
String b = "123";
创建了一个值为123
的字符串比较问題对象, 并将变量b
指向123
字符串比较问题对象所在的地址.
String c = "123";
检测到之前的字符串比较问题对象123
在常量池内, 直接将变量c
指向常量池中已有的123
的地址.
此时c==b
为true
, 因为b
和c
都指向同一个常量池内的123
地址.
大概就是这样. 应该.
简单地说”==”测试两个字符串仳较问题的引用是否相同,equals()测试两个字符串比较问题的值是否相同
除非你希望检查两个字符串比较问题是
否是同一个对象,否则最好用equals()
如果你知道字符串比较问题驻留机制会更好。
2.为什么对于安全性敏感的信息char[]要
字符串比较问题是不变的这也就意味着字符串比较问题┅旦被创建,它们将一直保持在那直到被垃
圾回收器清理为止而对于一个数组,你
它的元素这样一来,安全性敏感信息(比如密码)将不會出现在系统的任何其它地方
对于Java7答案是肯定的。从JDK7开始我们可以使用String作为switch语句的条件。在JDK6之前我们不能使
第一个为false 是因为s3 与 s1 + s2 进行比较的时候用的是 == 比较的是引用变量里存储的地址值首先,为s1 + s2 开辟一块新的内存空间 然后拼接字符串比较问题进行存储。
s3 == "Hello" + "World"; 先将Hello和world进行拼接然後比较他们的地址值得,HelloWorld拼接完成后查询字符串比较问题常量池中是否存在 HelloWorld 结果存在,就不再创建了所以比较的地址值正好是s3 的字符串比较问题所存储的地址
字符串比较问题如果是变量的话,例如 s1 s2 首先开辟一块空间(自己理解这个空间应在还是在字符串比较问题常量池中)然后进行拼接
字符串比较问题如果是常量的话 比如“Hello” "World" 先进行拼接,然后在常量池中找如果有就返回常量池的地址,如果没有就创建