Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.trim()为同一引用对象返回false_Java - Fatal编程技术网

Java String.trim()为同一引用对象返回false

Java String.trim()为同一引用对象返回false,java,Java,为什么这是假的 最初,str2引用str1对象。因此,对于str1==str2,与==比较将返回true 那么,为什么使用.trim方法时这是错误的呢 即使对于没有new关键字的文本,它也返回false String str1 = "Java "; //this is now without new keyword String str2 = str1; System.out.println(str1.trim()==str2.trim()); 注意:我知道如何使用.equals方法。

为什么这是假的

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

那么,为什么使用.trim方法时这是错误的呢

即使对于没有new关键字的文本,它也返回false

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

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

使用equals或equalsIgnoreCase方法来比较字符串。==比较对象标识。

字符串与等于进行比较,而不是==

使用等于而不是==

System.out.println(str1.equals(str2.trim()));

如果要比较字符串的内容,需要.equals

你修改过的例子

String str1=新的StringJava; 字符串str2=str1; System.out.printlnstr1.trim.equalstr2.trim//现在是真的
对于字符串比较,应使用str1.equalsstr2或str1.equalsIgnoreCasestr2


有关更多信息,请检查此项。

您有两个不同的字符串,因此有两个不同的引用。要比较内容,请使用equals。

因为您使用的是String str1=new StringJava; 不能使用==运算符

如果使用字符串str1=Java;,你可以用==

因此,这里要么将代码更改为字符串str1=Java

或改变

System.out.println(str1.trim().equals(str2.trim())); 

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

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

如果要比较字符串的实际内容,则需要使用方法equals of String class或equalsIgnoreCase(如果不关心大小写)


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

字符串在Java中是不可变的。 此外,字符串文本也被占用,即java维护一个字符串文本池

使用前2行创建一个对象,2个引用str1和str2到同一个对象

当修剪应用于字符串时,它将形成一个新的字符串对象,并将当前引用指定给新对象。 但由于在对象创建str1.trim和str2.trim时使用了new,因此最终都会创建两个单独的对象

参考:

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

==


“使用参照”功能“修剪”将创建具有新参照的新对象。这就是它总是返回false的原因

您得到的是什么输出?因为它们现在不是相同的引用。请记住字符串是不可变的,读取不准确。您可以始终使用==运算符,但它会比较引用。如果不使用new关键字,则由于池的原因,具有相同字符串值的字符串的引用将相同。这就是为什么==在这种情况下是好的。是的可以随时使用。但若字符串是使用新运算符创建的,它将显示为不相等,因为两个字符串在内存中具有不同的哈希代码。如果两个字符串都没有新的哈希代码,则两个字符串都将是相同的,如果使用==则将比较两个哈希代码,并将其视为相同的,即使没有新的字符串,它也将返回falsekeyword@Amit更新了我的答案。请现在检查。
System.out.println(str1.trim().equals(str2.trim())); 
  equals() or equalsIgnoreCase