Java的String类型
String不变性1)String类使用final修饰符,表明该类不能被继承; 2)String类的成员变量value是char[]类型,使用private和final修饰,即value不能指向其他对象,但是value指向的字符数组元素可修改;(需使用反射) 3)String的构造方法使用了pyOf()对value的操作进行保护性拷贝;多个字符串为何不建议频繁用“+”来拼接String类型字符串使用+号拼接时,在底层会创建新的字符串。JDK1.5之前,转化为StringBuffer对象的连续append()操作;JDK1.5及之后,会new很多StringBuilder对象进行append()操作。String s = new String("abc")可能创建1个也可能创建2个对象。1)若字符串常量池中有该abc字符串,则只在堆中创建一个对象,然后返回堆中的对象引用赋给栈中的s变量。2)若字符串常量池中没有该abc字符串,则在字符串常量池和堆中都创建对象。StringBuffer/StringBuilder 相同点1)类型:都是final类,都不允许被继承。 2)长度:都是可变的。string字符串转化数组
不同点
1)StringBuffer是线程安全的(synchronized修饰),StringBuilder是非线程安全的。2)StringBuffer性能差(加锁),StringBuilder性能较好(无锁)intern()方法String.intern()方法是native方法,作用是将指定的字符串对象的引用保存在字符串常量池中。1)若字符串常量池中保存了对应字符串对象的引用,直接返回该引用。 2)若字符串常量池中没有保存对应的字符串对象的引用,在常量池中创建一个指向该字符串对象的引用并返回。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论