0

为什么这是的?

String str1 = new String("Java    ");
String str2 = str1;
System.out.println(str1.trim()==str2.trim());  //false

最初str2是引用str1对象。因此,与 == 比较将返回 truestr1==str2

那么为什么这个方法是错误.trim()呢?

即使它为文字返回 false (没有 new 关键字)

String str1 = "Java    ";  //this is now without new keyword
String str2 = str1;
System.out.println(str1.trim()==str2.trim());

注意:我知道如何使用.equals方法。但是想知道==行为,特别是在 .trim() 的情况下,上面给出了两个例子。

4

11 回答 11

4

使用equals()orequalsIgnoreCase()方法比较字符串。==比较对象身份。

于 2013-04-15T08:02:25.003 回答
4

使用等于而不是 ==

System.out.println(str1.equals(str2.trim()));
于 2013-04-15T08:02:37.297 回答
4

字符串在 Java 中是不可变的。字符串文字也被实习,即java维护一个字符串文字池。

在前 2 行中,您正在创建一个对象和 2 个指向同一对象的 str1 和 str2 引用。

当 trim() 应用于字符串时,它会形成一个新的字符串对象并将当前引用分配给新对象。但是由于在对象创建 str1.trim() 和 str2.trim() 时使用了 new,所以最终都创建了 2 个单独的对象。

参考:http ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#trim%28%29

trim() 方法创建一个新对象。由于您在同一对象上单独应用了 trim()(尽管由多个引用 str1 和 str2 引用),因此创建了 2 个新对象。这就是引用相等不起作用的原因。

于 2013-04-15T08:09:21.220 回答
2

字符串与等号比较,而不是 ==

于 2013-04-15T08:02:26.677 回答
1

如果你想比较一个字符串的内容,你需要.equeals.

您的(修改后的)示例

String str1 = new String("Java    ");
String str2 = str1;
System.out.println(str1.trim().equals(str2.trim()));  //is now true
于 2013-04-15T08:02:46.780 回答
1

对于字符串比较,您应该使用str1.equals(str2)or str1.equalsIgnoreCase(str2)

有关更多要点,请检查此问题

于 2013-04-15T08:03:05.297 回答
1

由于您正在使用String str1=new String("Java "); 您不能使用==运算符

如果你用过String str1="Java ";,你可以用==

所以这里要么将代码更改为String str1="Java ";

或改变

System.out.println(str1.trim().equals(str2.trim())); 
于 2013-04-15T08:05:23.127 回答
1

“==”

使用 refrences 函数trim创建一个新对象,该对象将具有新的 refrence。这就是它总是返回 false 的原因

于 2013-04-15T08:22:37.563 回答
0

你有两个不同的字符串,所以有两个不同的引用。来比较内容使用equals()

于 2013-04-15T08:03:53.777 回答
0

== 将比较两个对象的 if 引用是否相同,因为它检查两个对象是否相同而不检查对象的内容。由于字符串是一个对象 == 仅适用于字符串类型的相同对象,而不检查字符串的内容。检查字符串使用的内容

  equals() or equalsIgnoreCase
于 2013-04-15T08:05:46.043 回答
0

您正在使用==符号进行比较。在java中this会比较实际对象,即两个变量是否指向内存中的同一个物理对象,同一个内存位置。

如果要比较字符串的实际内容,那么如果您不关心大小写,则需要使用类(或)equals的方法。StringequalsIgnoreCase

这同样适用于任何其他类型的对象。如果您使用 比较它们==,您将比较两个变量的物理内存位置。您将使用equals方法来比较对象的实际内容(假设该类实际实现了此方法)。

于 2013-04-15T08:06:56.727 回答