字符串不是引用类型吗,那==判断的不应该是地址相不相等吗,那为啥是true

字符串不是引用类型吗,那==判断的不应该是地址相不相等吗,那为啥是true

img

因为你的字符串内容一样,他会引用同一个字符串对象,又叫做字符串常量池

在Java中,字符串是一个特殊的引用类型,它有自己的特殊规则。当使用双等号“==”比较两个字符串时,它实际上比较的是字符串的值,而不是它们在内存中的地址。这是因为Java中的字符串是不可变的,在创建字符串时,它们在内存中的地址会被缓存起来,以便将来重用。这就意味着如果两个字符串具有相同的值,它们实际上会引用相同的对象,因此返回的是true。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/986185
  • 这篇博客你也可以参考下:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
  • 除此之外, 这篇博客: 个人算法重刷记录中的 给定一个整数数组,找到是否该数组包含任何重复数字。你的函数应该返回 true 只要有任何数字 在该数组中重复出现,否则返回 false。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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;
        }
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    字符串是引用类型,因为在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,因为忽略大小写,它们的值相同

    参考资料:

    1. Java字符串比较:==和equals方法的区别,https://www.cnblogs.com/Gnoodles/p/9026207.html。

    2. String类详解,https://www.runoob.com/manual/jdk1.6/java/lang/String.html。