Java String.trim()为同一引用对象返回false
为什么这是假的 最初,str2引用str1对象。因此,对于str1==str2,与==比较将返回true 那么,为什么使用.trim方法时这是错误的呢 即使对于没有new关键字的文本,它也返回falseJava 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方法。
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