我用==没有错啊,为什么啊,不都是类了吗?

来源:2-4 使用泛型

1479395

2020-07-20 20:07:22

泛型

写回答

1回答

liuyubobobo

2020-07-21

如果想做值比较,== 是错误的,但是,在你的运行中,不一定可以体现出来。


简单来说,Java 的编译器内部有优化,如果你创建了两个对象的内容是等同的,JVM 可能会“偷懒”,不创建新的对象,他们指向同一个对象。这实际是一个编译器优化,也就是把一些事情拖到必须要处理的时候再处理。而不是永远马上处理。因为很多处理结果,用户很有可能不需要。


当程序运行过程中,JVM 发现他们必须要区分对待的时候,再分离。这些过程在 JVM 内部,对用户不可见。逻辑上,用户应该认为他们是不同的对象。


这个问题在 String,Integer 等类中都存在。


这个优化的副作用就是:不正确的使用 ==,也可能得到正确的结果。


简而言之,错误的程序有可能获得正确的结果。但是必须明确:如果你想做类之间的值比较,应该用 equals,而不是 ==。在我的算法面试课成中,近乎每周都会有同学做 Leetcode 的问题产生错误,根源在于应该使用 equals 而不是 ==。


值比较和引用比较是非常重要的概念,在实际编程中经常会遇到。这属于 Java 语法知识了,不属于算法知识。如果对此迷糊,请再找相关资源补充学习一下。


加油!:)


2
hiuyubobobo
回复
h479395
h 谢谢你的支持,继续加油!:)
h020-07-21
共2条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2602 学习 · 1086 问题

查看课程