我正在使用JSP中的Java代码,我正在尝试比较字符串,我遇到了问题.
我宣布了两个字符串
s1 = "din";
s2 = "din";
Run Code Online (Sandbox Code Playgroud)
但是,if (s1 == s2)
永远不会执行.有人能帮我吗?
Mar*_*ers 12
==
字符串的运算符比较引用相等,而不是值相等.
尝试调用equals
而不是使用==
:
if (s1.equals(s2)) { ... }
Run Code Online (Sandbox Code Playgroud)
比较字符串时,应始终使用equals方法,而不是==:
if(str1.equals(str2))
Run Code Online (Sandbox Code Playgroud)
......将是正确的做事方式.
出现混淆的地方如下:
String str1 = "hello";
String str2 = "hello";
System.out.println(str1==str2);
Run Code Online (Sandbox Code Playgroud)
以上将实际打印出真实的.但是,除了上述学术目的外,你不应该使用它.如果你正在使用==,那么你正在检查这些值是否在堆上的物理上是同一个对象.如果你正在使用.equals(),你就会检查它们是否有意义相等,即使它们实际上是两个独立的对象.有时候,尤其是涉及文字的地方(例如上面的内容)(或者当您手动调用该intern()
方法时),出于性能原因,Java会自动使两个单独的字符串对象指向同一个对象.但是,没有合理的保证会发生这种情况(除非你想用JLS的明确细节来打扰自己,即使这样,它有时只能得到保证),而且大部分时间都不会.以下面的例子为例:
String str1 = "hello";
String str2 = "he";
str2 += "llo";
System.out.println(str1 == str2);
Run Code Online (Sandbox Code Playgroud)
现在它打印错误,因为尽管有意义相同,但我们没有达到Java之前提供的相同优化.
在上面的两种情况中,using,equals()都会返回true.
归档时间: |
|
查看次数: |
1011 次 |
最近记录: |