游戏人日常 2015-10-19 03:09 采纳率: 50%
浏览 1414
已采纳

1为什么是输出是false 最好用内存图解解释下,谢谢了 内存知识不太懂,

public class StringDemo {
public static void main(String[] args) {
String str1="Hello";
String str3=str1;
System.out.println("str1==str3"+":"+str1==str3);
}
}

为什么是输出是false 最好用内存图解解释下,谢谢了 内存知识不太懂,

  • 写回答

1条回答 默认 最新

  • 毕小宝 领域专家: 后端开发技术领域 2015-10-19 04:02
    关注

    你是直接定义的字符串常量,本质上str1和str3是指向同一个常量池的。你的代码之所以输出false是因为你真正执行的是字符串"str1==str3:hello"和str3进行等操作
    优先执行前面的字符串加操作,后执行后面的==操作了。
    修正测试代码:

        boolean flag = str1==str3;
            System.out.println("str1==str3:"+flag);
    

    或者修正如下(加一括号提高优先级)

     System.out.println("str1==str3"+":"+(str1==str3));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?