string那些事

1.

String s1="abc";
String s2="abc";
System.out.println(s1==s2);
注释:在执行过程中,如果程序用到某个字符串,例如,“abc”,程序会在方法区字符串常量池中去搜索该字符串,如果没有找到,就会在字符串常量池中创建一个“abc”字符串,如果找到,就直接拿过来用就可以了。

字符串常量池是一个缓冲区,为了提高访问字符串的效率。

2.

String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3==s4);//false
注释:使用new关键字则是在堆中开辟空间,所以比较的是内存地址。所以结果是false.

System.out.println(s3.equals(s4));
注释:这个结果是true,因为string已经重写了object类的equals方法,比较的不是内存地址,而是实体内容
3.问以下这三行代码会在底层创建几个字符串对象?

String s5 = "aaa";
String s6 = "bbb";
String s7 = s5 + s6;
注释:会在字符串常量吃池中创建3个字符串对象"aaa","bbb","aaabbb"

但是不建议做字符串的拼接,会在字符串常量池中浪费空间

4.问这两行代码会在底层创建几个对象?

String s1=new String("abc");
String s2=new String("abc");
注释:首先,s1会在方法区的字符串常量池中创建一个“abc”字符串对象,还会在堆中再创建一个“abc”的字符串对象,然后s2在常量池中搜索这个“abc”对象,搜索到了就不在创建了,但是它仍会在堆中创建一个“abc”对象,所以会在底层创建3个对象。(常量池中1个,堆中2个)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值