String对象常见面试题

  1. 判断s1和s2是否相等
    String s1=“abc”; //常量池中如果没有这个字符串对象,就创建一个,如果有,直接使用即可
    String s2=“abc” ;
    System.out.println(s1==s2);
    System.out.println(s1.equals(s2));

答案:第一个true,第二个true 因为==比较的是地址,equals比较的是内容
在这里插入图片描述
2. 判断下面语句创建了几个对象
String s1=new String(“abc”);
解析: 因为常量池没有abc,所以首先要创建一个,然后由于语句中有new,所以会在堆中开辟一个空间,并且将abc的复制一份过去,堆中的地址赋给s1.下面两幅图说明此问题,所以这个语句创建了两个对象.
在这里插入图片描述这是JDK中API描述
在这里插入图片描述

  1. 判断s和s1是否相等
    String s=new String(“abc”);
    String s1=“abc”;
    System.out.println(s==s1);
    System.out.println(s.equals(s1));
    答案:第一个false,第二个true
    解析:由上面两道题可知,s和s1指向的地址是不一样的,所以= =是false,equals比较内容,所以是true

  2. 判断s和s1是否相等
    String s=“a”+“b”+“c”;
    String s1=“abc”;
    System.out.println(s==s1);
    System.out.println(s.equals(s1));

答案:两个都是true
解析:在java中有常量优化机制,“a”,“b”,“c"三个都是常量,所以在编译的时候,编译器就优化了,s就是"abc”,所以两个都是true

  1. 判断s2和s3是否相等
    String s1=“ab”;
    String s2=“abc”;
    String s3=s1+“c”;
    System.out.println(s2==s3);
    System.out.println(s2.equals(s3));

答案:第一个false,第二个true
解析:Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。 字符串连接是通过StringBuilder (或StringBuffer )类及其append方法实现的。 字符串转换是通过方法来实现toString(这个JDK中描述),相当于在+的时候,有其他对象,需要先在堆中创建一个StringBuffer或者StrinfBuilder对象,再把在这个对象通过toString的方法转换成String对象,所以这道题s3的地址肯定是不同于s2的,下方图中详细表达出

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值