String字符串的特点 ---- 常见面试题 (详解)

5 篇文章 1 订阅
2 篇文章 0 订阅

String字符串的特点:

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

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

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

       注意: 这里所说的共享指的是字符串常量池.

      字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在

         存在 : 不会创建,而是直接复用

         不存在:创建

String常见面试题:

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

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);
    }

     结果为:true

     原因:s1对象通过双引号创建的字符串存储到字符串常量池中,当代码运行到s2时,系统首先会在字符串常量池中进行查找,如果有,则不创建新的字符串.  s1和s2指向的内存地址值相同,结果为true

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

public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2);
    }

         结果: false

         原因: s2 是new出来的对象,进入堆内存创建新的内存地址

         注意:  这句代码实际上是创建了两个对象("abc"和new出来的对象).  这种通过有参构造方法创建字符串对象的方法不建议使用,会浪费内存

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

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 + "c";
        System.out.println(s1 == s3);
    }

         结果: false

          原因:     在字符串之间使用 + 号拼接的时候,系统底层会自动创建一个StringBuilder对象,然后再调用起append()方法完成拼接,拼接之后再调用toString()方法转换为String类型.

         内存结构如下图所示:

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

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a"+"b"+"c";
        System.out.println(s1 == s2);
    }

         结果为: true

         原因:  特别注意,这里千万不能认为出现了+号拼接,系统底层帮我们干了很多事情

              仔细看!!!!(重点): 这三个是带双引号的字符串常量进行拼接

      Java中存在常量优化机制,在编译的时候就会将"a"+"b"+"c"拼接为"abc" 因此该结果为true

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值