字符串不是引用类型吗,那==判断的不应该是地址相不相等吗,那为啥是true
因为你的字符串内容一样,他会引用同一个字符串对象,又叫做字符串常量池
在Java中,字符串是一个特殊的引用类型,它有自己的特殊规则。当使用双等号“==”比较两个字符串时,它实际上比较的是字符串的值,而不是它们在内存中的地址。这是因为Java中的字符串是不可变的,在创建字符串时,它们在内存中的地址会被缓存起来,以便将来重用。这就意味着如果两个字符串具有相同的值,它们实际上会引用相同的对象,因此返回的是true。
public class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> numSet = new HashSet<Integer>();
for (int i = 0; i < nums.length; i++) {
if (numSet.contains(nums[i]))
return true;
else
numSet.add(nums[i]);
}
return false;
}
}
回答:
字符串是引用类型,因为在Java中,字符串是一个对象,具有自己的方法和属性。在使用==运算符比较字符串时,实际上是在比较两个字符串对象的地址是否相等。但是,如果两个字符串对象具有相同的值,它们会指向相同的对象,这就解释了为什么在使用==运算符比较两个字符串变量时会得到true的结果。
代码演示:
String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); System.out.println(str1 == str2); // true,因为它们指向相同的对象 System.out.println(str1 == str3); // false,因为它们指向不同的对象
如果需要比较两个字符串变量是否具有相同的值,应该使用equals()方法。例如:
String str1 = "hello"; String str2 = "Hello"; System.out.println(str1.equals(str2)); // false,因为它们的值不同 System.out.println(str1.equalsIgnoreCase(str2)); // true,因为忽略大小写,它们的值相同
参考资料:
Java字符串比较:==和equals方法的区别,https://www.cnblogs.com/Gnoodles/p/9026207.html。
String类详解,https://www.runoob.com/manual/jdk1.6/java/lang/String.html。