16、String字符串的存储原理

本文探讨了Java中字符串的特性,强调String是不可变对象并存在于字符串常量池。通过示例代码解释了字符串对象的创建过程,指出`==`比较的是对象引用而非内容,提倡使用equals方法进行字符串内容比较。同时,提到了字符串常量池提高执行效率的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。
2、在Java中随便使用双括号括起来的都是String对象,例如:“abc”、“def”。
3、Java中规定,双引号括起来的字符串,是不可变的,也就是“abc”自出生到最终死亡,不可变。
4、在JDK当中双括号括起来的字符串,例如:“abc”、“def”都是直接存储在方法区的字符串常量池当中的。

为什么把字符串存储在一个“字符串常量池”当中的,因为字符串在开发中使用太频繁。为了执行效率,所以把字符串存储在字符串常量池中。

public class StringTest {
    public static void main(String[] args) {
        //这两行代码表示底层创建了3个字符串对象,都在方法区的字符串常量中
        String s1 = "abcdef";
        String s2 = "abcdef" + "xy";
        
        //分析:这是使用new方法创建的字符串对象,这个代码的“xy”是从哪里来的?
        //凡是双引号括起来的都在字符串常量池中有一份。
        //new对象的时候一定在堆内存中开辟了空间。
        String s3 = new String("XY");
        
    }
}

public class StringTest {
    public static void main(String[] args) {
        String s1 = "hello";
        //“hello”是存储在方法区的字符串常量池当中的。
        //所以这个"hello"不会创建(因为这个对象已经存在了)
        String s2 = "hello";
        System.out.println(s1 == s2);
        //分析结果是true还是false
        //== 的结果是 true


        String x = new String("xyz");
        String y = new String("xyz");
        //分析结果是true还是false
        System.out.println(x == y);//false

        //通过这个案例,我们知道了,字符串对象之间不能使用“==”
        //“==”不保险,应该使用String类中equals方法。
        //String类已经重写了equals方法,以下的equals方法调用的是Stirng重写的equals方法。
        System.out.println(x.equals(y));


        String k = new String("testString");
        //"String"这个字符串之后能够加.吗?
        //因为"testString"是一个String字符串对象,只要对象都能调用方法。
        System.out.println("testString".equals(k));//建议使用这个方法,因为这个可以避免空指针异常。
        System.out.println(k.equals("testString"));


    }
}

面试题

public class StringTest02 {
    public static void main(String[] args) {
     /*
     一共创建了几个对象?
     3个
     方法区字符串中的字符串常量中的hello
     堆内存当中的两个String对象
      */
     
        String s1 = new String("hewllo");
        String s2 = new String("hello");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值