侧边栏壁纸
博主头像
马杰如的博客

一切有为法,如梦幻泡影,如露亦如电,应作如是观。

  • 累计撰写 9 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Java语言里的一些小知识------字符串常量池

马杰如
2025-06-03 / 0 评论 / 3 点赞 / 20 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
public class Main {
    public static void main(String[] args) {
        String a = "hello";
        String b = "hello";
        String c = new String("hello");
        if (a == b) {
            System.out.println("a==b");
        } else {
            System.out.println("a!=b");
        }
        if (a == c) {
            System.out.println("a==c");
        } else {
            System.out.println("a!=c");
        }
    }
}

Java语言并不直接暴露对象的内存地址,我们并不能直接打印地址来对比,但是我们可以从侧面推理出来这个结果.这里有一个前提就是,==对于基本数据类型是判断值是否相等,而对于引用数据类型是判断的地址是否相等,Java里面比较字符串是否相等或者一些类是否相等,往往都是用的equals方法,因为equals方法只关注内容是否一样,而不是地址.在实际应用的时候,我们一般确实只需要比较内容是否相等就行了,

大家可以先运行一下这段代码,不难发现,a和b是相等的,但是a和c是不相等的.这是因为当直接创建一个没有用过的一段字符串,Java就会在字符串常量池里创建,如果后面还有变量使用的话,就会直接把字符串常量池里的这个字符串的地址赋给这个变量.

而new关键字我们都知道,它的数据会在堆里面开辟一个新的内存,所以不管你new多少个字符串"hello",他们的地址都是不同的.

3

评论区