旷世奇才李先生 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的地址后再比较它们。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵