FreeFly辉 2021-08-23 14:47 采纳率: 100%
浏览 59
已结题

java中的String的==比较

public static void main(String[] args) throws Exception {
        String a = "a";
        String param = "b" + a;
        System.out.println(param.intern() == "ba");
        System.out.println(param == "ba");
}

输出为 :

true
true

public static void main(String[] args) throws Exception {
        String a = "a";
        String param = "b" + a;
        System.out.println("ba" == param.intern());
        System.out.println(param == "ba");
 }

却是输出为:

true
false


我想知道为啥俩次输出的结果不一样,仅是调换了 == 俩边参数的位置,==前后有啥特殊的特性嘛?

  • 写回答

4条回答 默认 最新

  • FreeFly辉 2021-08-23 15:42
    关注

    String a = "a";
    String param = "b" + a;
    // System.out.println(param.intern() == "ba"); //param.intern放在前面,此时常量池还没有 "ba",
    // 因此将自身放入了常量池,后面的"ba"也就指向了自身,比较也就是true了
    System.out.println("ba" == param.intern()); //放在 == 后面时,此时"ba"已经存在了,因此param.intern()并不会将自身放在常量池中,
    // 只是返回值是常量池中的对象。所以自身已用和常量池中的不再是同一个对象
    System.out.println(param == "ba");

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 创建了问题 8月23日