游戏人日常 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));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题