请问,通过如下两种不同的方法定义的内容相同的字符串使用==判断结果为何不同(r 和 h 值不相同)?
- 1
String b = "123";
String c = "123";
Boolean r = (c==b);// r 为true
- 2
String v = new String("123");
String n = new String("123");
Boolean h = (v==n); //h 为 false
请问,通过如下两种不同的方法定义的内容相同的字符串使用==判断结果为何不同(r 和 h 值不相同)?
String b = "123";
String c = "123";
Boolean r = (c==b);// r 为true
String v = new String("123");
String n = new String("123");
Boolean h = (v==n); //h 为 false
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
String b = "123";
创建了一个值为123
的字符串对象, 并将变量b
指向123
字符串对象所在的地址.String c = "123";
检测到之前的字符串对象123
在常量池内, 直接将变量c
指向常量池中已有的123
的地址.此时
c==b
为true
, 因为b
和c
都指向同一个常量池内的123
地址.同理
String v = new String("123");
新建了两个对象, 一个值为123
的字符串对象, 放入常量池内, 另一个对象的值为123
, 变量v
指向的是后者, 而不是常量池里的123
的地址.String n = new String("123");
新建了一个对象, 因为之前常量池里已经有123
了, 所以不用再加入.此时
v==n
为false
, 因为v
和n
并不是指向常量池里的123
, 而是两个不同的对象, 只是值一样.大概就是这样. 应该.