1.String是最基本的数据类型吗?
答:不是,最基本的数据类型有:byte short int long float double char boolean
java.lang.String类时final修饰的类,因此不可以继承这个类,也不能修改这个类,为了节省内存空间,我们通常使用StringBuffer类
2.String s="Hello"; s=s+"World"; 这两段代码执行后,原始的String对象中的内容道理有没有改变?
答:没有,因为String是不可变的类,所以它的所有对象都要是不可变的。
原来指向一个String对象,内容是Hello。 然后我们对s进行了+操作,那么现在s指向了HelloWorld对象 原来的Hello对象还存在内存中。
通过上面我们得出一个结论我们String进行一些不可预见的一些修改那么会对内存进行大量的开销。这时候就可使用StringBuffer
3.String s = new String("abc"); 请问一共创建了几个对象?二者有什么区别?
答:一共创建了一个或者两个! 取决于之前是否创建xyz对象,如果之前创建过xyz对象那么上面的就创建一个对象
new String(); 每写一遍就会创建一个对象,而且是放在内存的堆中。
String字符串是放在常量缓冲区的,不管之前出现过多少遍xyz,都指的是常量缓冲区的那一个
4.String ,StringBuffer,StringBuilder的区别?
答:个人理解,如果用String操作字符串,只会不断开辟新的对象,之前的对象还一直保留在内存中,会大大的消耗内存空间
StringBuffer操作字符串,会在原有的对象基础上进行操作,指是对一个对象不断的操作,大大节约了内存空间。
StringBuffer是不可以直接赋值的,需要通过创建他的对象才可以赋值
StringBuffer是一个线程安全的可变字符序列,StringBuilder是线程不安全的可变字符序列
StringBuffer和StringBuilder都是操作append() 和 insert()方法的
append() 是始终将追加的字符串添加到缓冲区的末端
insert() 是在指定索引位置添加指定的数据类的值
通常这两种操作是会得到相同效果的 sb.append(x); sb.insert(sb.length(),x);得到的结果是一样的
5.数组有没有length()方法? String有没有length()方法?
答:数组有length属性,是获取数组长度的
String有length()方法,是获取字符串的长度的