gpt4 book ai didi

java - 为什么在比较字符串、java 1.6.0_29、osx 时可以使用 "=="?

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:05 25 4
gpt4 key购买 nike

昨天(2012 年 4 月 5 日)我正在尝试比较环境中的字符串:

计算机 1

  1. Java(TM) SE 运行时环境(内部版本 1.6.0_29-b11-402-11D50b)
  2. OS X 10.7.3

计算机 2

  1. Java(TM) SE 运行时环境(内部版本 1.6.0_29-b11-402-11D50b)
  2. 窗口 7

计算机 3

  1. Java(TM) SE 运行时环境(内部版本 1.6.0_29-b11-402-11D50b)
  2. Linux Ubuntu 11.10

这是我正在尝试的代码

public class TComp{
public static void main(String[] args){
String a = "arif";
String b = "arif";
if(a==b){
System.out.println("match!");
}
}
}

据我所知,要在 java 中比较字符串,我们应该使用 .equal() 函数,并且 '==' 将在这种情况下进行实习。但是对于所有操作系统不同的计算机,为什么实习生在计算机 1 上工作正常,而我在计算机 2 和计算机 3 上却出错?

如果我有任何错误,请更正。谢谢。

最佳答案

在同一个类中,所有的字符串常量都被编译器(在编译时)折叠到.class文件常量池中。这意味着编译器将只存储一个字符串副本(因为谁需要池中有两个相同的常量?)。

这意味着在一个类中,== 字符串比较经常有效;但是,在您太兴奋之前,有一个很好的理由让您永远不要使用 == 比较字符串。 不能保证您比较的两个字符串都来自类内常量池。

所以,

"foo" == new String("foo")

完全有可能失败,而

"foo" == "foo"

可能会起作用。这可能在很大程度上取决于实现,如果您根据实现而不是规范编写代码,如果实现发生变化,您可能会发现自己陷入非常讨厌的惊喜,因为规范实际上并不需要 < em>那个实现。

简而言之,每次都使用.equals(...) 进行Object 比较。保留 == 用于原始比较和“这是同一对象实例”的比较。即使你认为这两个 Strings 可能是 intern 的(或同一个对象),因为你永远不知道什么时候你将在不同的类加载器下运行,在不同的 JVM 实现上,或者在一台机器上运行只是决定不实习一切。

关于java - 为什么在比较字符串、java 1.6.0_29、osx 时可以使用 "=="?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com