1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
(1)引用数据类型包括类,接口和数组,而Sring属于类,是引用数据类型。
(2)字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] ),
数组的长度确定以后是不能改变的,所以字符串的长度不可变。
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
(1) String s = new String("abc");这句话创建2个对象,
s在堆内存中创建,“abc”在在堆内存中的字符串常量池中创建
(2)String s = "abc"; 当字符串常量池没有“abc”时,
在堆内存中的字符串常量池中创建1个对象, 否则没有创建对象。
3.StringBuilder的作用,为什么要使用StringBuilder
StringBuilder 是一个可变的字符串类,可以用它来存放字符串。
因为字符串对象在java中使用非常频繁,如果每次使用相同内容的字符串都要重新创建对象,这样对内存的消耗非常大,而使用StringBuilder,当要使用字符串的时候,就会去字符串常量池中去找,有没有值相同的字符串,如果有,直接引用该对象的地址,如果没有,创建字符串对象,并存入常量池中,以便下次使用。
|