Stirng

关于Java JDK内置的一个类:java.lang.String
1、String 表示字符串类型,属于引用类型、不属于基本数据类型。
2、在Java中随便使用双引号括起来的对象都是String对象。例如:"abc","def"等等,这是两个String对象
3、在Java中规定,双引号括起来的字符串是不可变的,也就是说"abc"自出生到最终死亡,不可变,也不可能变成"abcd",也不能变成"ab"。
4、在JDK当中双引号括起来的字符串,都是直接存储在“方法区”的“字符串常量池”当中的。
为什么SUN公司把字符串存储在一个“字符串常量池当中呢”。因为字符串在实际的开发中使用太频繁。为了执行效率,
所以把字符串放到了方法区的字符串常量池当中。
public class Test {
    public static void main(String[] args) {
//        在字符串常量池当中创建了三个不同的字符串对象。
        String s1 = "abcd";
        String s2 = "abcd";
        String s3 = "xy";
        //分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪来的?
        //凡是双引号括起来的都在字符串常量池中有一份
        //new对象的时候一定在堆内存当中开辟空间。
        String s4 = new String("xy");
        System.out.println(s3.equals(s4));   //结果为true

        //i变量保存的110这个值
        int i = 110;
        //s变量保存的是字符串对象的内存地址
        String s = "100";
        System.out.println(s);
    }
}
public class StringTest02 {
    public static void main(String[] args) {
        //第一个s1是在字符串常量池当中创建
        String s1 = "hello";
        //第二个s2是引用的地址。
        String s2 = "hello";
        // == 双等号是比较的内存地址  equals 是比较的值
        System.out.println(s1.equals(s2));

        String s3 = new String("xyz");
        String s4 = new String("xyz");
        //每new一次都会在堆内存当中创建一个对象,
        // 由于在栈当中的s3,s4是引用的堆对象的地址,
        // 所以s3的地址和s4的地址是不等于的
        // 而他们的值是相等的。
        //因此当我们在比较两值是否相等我们调用equals更加保险
        System.out.println(s3 == s4);
        System.out.println(s3.equals(s4));


//        String k = new String("TestString");
        //因为"TestString"也是字符串对象,因此可以调用String的方法。
        String k = null;
        System.out.println("TestString".equals(k));//建议使用这种方式,因为这个可以避免空指针异常。
        System.out.println(k.equals("TestString"));//存在空指针异常的风险,因此不采用这种书写方式
    }
}

测试图如下

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值