昨天(2012年4月5日)我正在尝试比较环境中的字符串:
电脑1
电脑2
电脑3
这是我尝试的代码
public class TComp{
public static void main(String[] args){
String a = "arif";
String b = "arif";
if(a==b){
System.out.println("match!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,要比较java中的字符串,我们应该使用.equal()函数,'=='将在这种情况下进行实习.但是对于那些所有具有不同操作系统的计算机,为什么实习生在计算机1中工作正常,而我在计算机2和计算机3中出错?
如果我错了任何一种词,请更正.谢谢.
在同一个类中,.class编译器将所有字符串常量都折叠到文件常量池中(在编译时).这意味着编译器只会存储一个字符串副本(因为谁需要池中有两个相同的常量?).
这意味着在一个类中,==字符串的比较通常有效; 然而,在你太兴奋之前,有一个很好的理由你永远不应该使用==字符串的比较. 无法保证您比较的两个字符串都来自同类常量池.
所以,
"foo" == new String("foo")
Run Code Online (Sandbox Code Playgroud)
完全可能会失败,而
"foo" == "foo"
Run Code Online (Sandbox Code Playgroud)
可能有用.这力量很大程度上取决于执行的,如果你的代码来执行,而不是规范,你会发现自己在如果实现变化,因为规范实际上并不需要一个很讨厌的惊喜在于执行.
简而言之,每次都.equals(...)用于Object比较.保留==原始比较和"这是相同的对象实例"比较.即使您认为这两个Strings可能是实例(或同一个对象),因为您永远不知道何时将在不同的类加载器下运行,在不同的JVM实现上运行,或者在一台仅仅决定不实习的情况下运行.
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |