java的String中,如果==比较的是变量地址

java的String中,如果==比较的是变量地址,那么为什么这个图片里面的两个变量相同,按照道理,a和b是两个变量,他们的地址应该不一样

img

java的相同字符串只会存在一个,a,b的地址指向是相同地址,所以是true

【相关推荐】



  • 请看👉 :java 中 equals 和 == 的区别(基本数据类型、一般类、String)
  • 除此之外, 这篇博客: java之字符串--回文字符串中的 最简单的方法就是将字符串颠倒赋值给另一个String变量,让两个变量比较。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    public static void main(String[] args) throws IOException {
            System.out.println("请输入字符串:");
            String str,sum="";
            int i;
            Scanner cin = new Scanner(System.in);
            str = cin.nextLine();
            //回文字符串,从左向右与从右向左,对应字符一样
            char[] ch=str.toCharArray();//将String转换为char数组
            for(i=ch.length-1;i>=0;i--){
                sum+=ch[i];//将字符串颠倒
            }
            if(sum.equals(str))
                System.out.println("是回文字符串");
            else
                System.out.println("不是回文字符串");
        }
    
    请输入字符串:
    a123_5_321a
    是回文字符串
    
    进程完成,退出码 0
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你这个字面量的原因,你这里是把“a”赋给了两个变量,由于java中String类型吃的堆内存很大,所以有字符串常量池的设计,也就是说你这个“a”被放进了常量池,后续你不管再给哪个东西显示的赋值“a”,它都使用的是常量池里的“a”,自然,这样他们内存地址肯定是一样的。当然,你也可以使用new来创建新的字符串,那就是新的对象了,你可以自己跑这段代码,感受一下里面的原理

        String a = "a";
        String b = new String(a);
        String c = new String("a");
        System.out.println(a == c);  // false
        System.out.println(a == b); // false
        System.out.println(b == c); // false
        System.out.println(b.intern() == c.intern()); // true