返回信息流为何以下这段代码打印结果是true呢,不是说==是指地址相等吗,谢谢
public class Test {
public static void main(String[] argvs){
String str1 = "hello";
if(str1 == "hello"){
System.out.println("true");
}else{
System.out.println("false");
}
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #29400同步于 2014/4/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
菜鸟求教一个输出结果
Volon
2014/4/18镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我知道,为什么str=="hello"就是true呢,"hello"在这怎么理解呢,是一个对象吗
【 在 DuskBlossoms 的大作中提到: 】
: 改成str1 == new String("hello")就FALSE了
String s = new String( "myString" );
其中字符串常量是"myString",在编译时被存储在常量池的某个位置。在解析阶段,虚拟机发现字符串常量"myString",它会在一个内部字符串常量列表中查找,如果没有找到,那么会在堆里面创建一个包含字符序列[myString]的String对象s1,然后把这个字符序列和对应的String对象作为名值对( [myString], s1 )保存到内部字符串常量列表中。
如果虚拟机后面又发现了一个相同的字符串常量myString,它会在这个内部字符串常量列表内找到相同的字符序列,然后返回对应的String对象的引用。维护这个内部列表的关键是任何特定的字符序列在这个列表上只出现一次。
例如,String s2 = "myString",运行时s2会从内部字符串常量列表内得到s1的返回值,所以s2和s1都指向同一个String对象。但是String对象s在堆里的一个不同位置,所以和s1不相同。
转自http://blog.csdn.net/sureyonder/article/details/5569366
【 在 Volon 的大作中提到: 】
: 为何以下这段代码打印结果是true呢,不是说==是指地址相等吗,谢谢
: public class Test {
: public static void main(String[] argvs){
: ...................
大神~~~
【 在 unlimited 的大作中提到: 】
: [i]String s = new String( "myString" );
: 其中字符串常量是"myString",在编译时被存储在常量池的某个位置。在解析阶段,虚拟机发现字符串常量"myString",它会在一个内部字符串常量列表中查找,如果没有找到,那么会在堆里面创建一个包含字符序列[myString]的String对象s1,然后把这个字符序列和对应的String对象作为名值对( [myString], s1 )保存到内部字符串常量列表中。
: 如果虚拟机后面又发现了一个相同的字符串常量myString,它会在这个内部字符串常量列表内找到相同的字符序列,然后返回对应的String对象的引用。维护这个内部列表的关键是任何特定的字符序列在这个列表上只出现一次。
: ...................