String字符串

一:String字符串的特点

1.Java程序中所有的双引号字符串,都是String类的对象

2.字符串不可变,它们的值在创建后不能被更改

3.虽然String的值是不可变的,但是它们可以被共享

二:String常见的面试题:

问题:下列代码的运行结果是?

1.

public class Test1 {

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";//字符串常量值
        System.out.println(s1==s2);//true
    }
}

答:结果是true,因为s1在使用双引号创建字符串对象的时候。会检查字符串常量池中有没有,如果没有,就创建出来,s1就记录了abc这个字符串在字符串常量池中的地址。s2也是用双引号创建abc对象,同样会进入到字符串常量池中去检查有没有,如果有就不用创建了,直接复用这个s1的内存地址。所以s1和s2就指向同一个内存地址。使用==就会返回true了。

2.

public class Test2 {
    public static void main(String[] args) {
        String s1 = "abc";//直接创建
        String s2 = new String("abc");//通过构造方法创建,这种方法创建了两个对象,有点浪费内存。建议直接创建
        System.out.println(s1==s2);//false

    }
}

答:s1中abc的地址是在字符串常量池中的地址,而s2是通过new在堆内存中创建出来的地址,地址指向不一样,使用==号,所以返回false。

 3.

public class Test3 {
    public static void main(String[] args) {

        /*

        String这个类比较特殊,打印其对象名的时候不会出现其内存地址,而是该对象所记录的真实内容
         */
    
        String s1= "abc";//指向的是字符串常量池中的地址
        String s2 = "ab";
        String s3 = s2+"c";//拼接结束后,指向的是堆内存的地址
      /*字符串的+号拼接,
      系统底层会自动创建一个StringBuilder对象,
      然后调用其append方法完成拼接,
      拼接后,再调用其toString方法完成对String类型的转化*/
        System.out.println(s1==s3);//两个内存地址不同,所以false
    }
}

答:这里最重要的是s3的+号拼接(请阅读代码注释)。看下图

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉锵T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值