问题1:String是基本数据类型吗?
不是,而是引用类型。数组元素能用下标访问,String则不行,想要访问单个字符时必须借助String类里面的的charAt(intdex)方法,index是字符下标
String str = new String(“abc”); (记住这句代码,后面也会用)
问题2:String对象创建后能直接修改吗?
不能直接修改,因为String类里面用final修饰(变成了常量),一旦实例化一个String对象,就不能改里面的元素了
问题3:String对象创建后怎么通过其他方式修改?
方法1:把String字符串转换为字符数组再修改
char[] charArray = str.toCharArray();
然后修改后也可以再转换为String类型: str = new String(charArray);
方法2:String字符串转换为StringBuilder类型后再修改
StringBuilder newstr = new StringBuilder(str);
newstr.setCharAt(2,'d');
其中2是“abc”中‘c’的下标,修改后字符串由“abc”变成“abd”
方法3:String字符串转换为StringBuffer类型后再修改
StringBuffer newstr = new StringBuffer(str);
问题4:如何判断2个String类型字符串的值是否完全一样?
用String类提供的equals()方法。用(str1==str2)是错误的,str1,str2均为字符串引用,此时判断的是str1和str2所指向的字符串的地址是否相同,而不是字符串的值
问题5:String类能被其他类继承吗?
不能,因为String由final修饰,所以不可被继承
问题6:String str = "abc"与String str = new String("abc")一样吗?
不一样,对于String str = "abc",“abc”字符串被存放在常量池中,编译时编译器首先会在常量池中寻找“abc”字符串,如果有直接取出来,如果没有就new一个“abc”放在常量池中
对于String str = new String("abc"),编译时编译器直接在堆区里new一个字符串“abc”,不会到常量池里去查询