我用==没有错啊,为什么啊,不都是类了吗?
来源:2-4 使用泛型
1479395
2020-07-20 20:07:22
泛型
1回答
liuyubobobo
2020-07-21
如果想做值比较,== 是错误的,但是,在你的运行中,不一定可以体现出来。
简单来说,Java 的编译器内部有优化,如果你创建了两个对象的内容是等同的,JVM 可能会“偷懒”,不创建新的对象,他们指向同一个对象。这实际是一个编译器优化,也就是把一些事情拖到必须要处理的时候再处理。而不是永远马上处理。因为很多处理结果,用户很有可能不需要。
当程序运行过程中,JVM 发现他们必须要区分对待的时候,再分离。这些过程在 JVM 内部,对用户不可见。逻辑上,用户应该认为他们是不同的对象。
这个问题在 String,Integer 等类中都存在。
这个优化的副作用就是:不正确的使用 ==,也可能得到正确的结果。
简而言之,错误的程序有可能获得正确的结果。但是必须明确:如果你想做类之间的值比较,应该用 equals,而不是 ==。在我的算法面试课成中,近乎每周都会有同学做 Leetcode 的问题产生错误,根源在于应该使用 equals 而不是 ==。
值比较和引用比较是非常重要的概念,在实际编程中经常会遇到。这属于 Java 语法知识了,不属于算法知识。如果对此迷糊,请再找相关资源补充学习一下。
加油!:)
相似问题