小奇JAVA面试 2021-03-28 16:27 采纳率: 0%
浏览 15

为什么第6行和第8行代码注释掉和不注释掉结果为什么会不同,这明明是两个String对象,用==来判断

为什么第6行和第8行代码注释掉和不注释掉结果为什么会不同,这明明是两个String对象,用==来判断应该就为false吧,为什么左边注释掉的结果为false,右边不注释的又为true呢?难道赋值以后a和b的地址又变的一样了吗?
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-23 21:00
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java中,==运算符用于比较两个对象是否相等。如果两个对象有相同的内存地址(即它们指向同一个连续的存储空间),那么==返回true;否则返回false

    在这个例子中:

    • 第6行: String a = new String(original:"李四");
    • 第8行: String b = new String(original:"李四");

    这两个字符串对象的内存地址是不同的。所以,当你尝试使用==操作符比较这两个字符串时,它会返回false

    然而,在你的代码中,你有一个额外的操作System.out.println(a == b)。这个打印语句并不直接比较a和b是否相等。实际上,它的作用是在控制台上输出a和b的值,而不是进行比较。

    所以,即使a和b的内存地址不同,但它们的值仍然相同,因此print语句输出了相同的值(也就是"a")。这就是为什么即使a和b的地址不同,但是当我们在控制台输出他们的值时,显示的仍然是"a"的原因。

    如果你想让程序正确地比较a和b的地址是否相同,你应该取消print语句或者修改print语句以获取a和b的地址后再比较它们。

    评论

报告相同问题?