String类在java.lang包中,Java使用String类创建一个字符串变量,字符串变量属于对象。
String类为什么是final的
确保不在子类中改变语义,final意味着不允许定义String子类,String对象只读,可以共享(指字符串常量池共享)
2)效率上,JVM不用在虚函数表中查询,直接定位String类方法,提高效率,共享带来的效率更高,保证java.lang.String。
String, StringBuilder, StringBuffer区别
String字符串常量,StringBuffer字符串变量(线程安全),StringBuilder字符串变量(非线程安全),String和StringBuffer主要区别,String是不可变对象,对String对象改变相当于新生成String对象,而StringBuffer是对原对象操作,频繁改变时StringBuffer效率高,StringBuffer与StringBuilder兼容,但不保证同步(synchronized关键字修饰保证同步,所以StringBuffer的线程安全也是有一定性能开销的)。
String类的编码
GBK编码专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。
UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间。另外,如果是外国人访问你的GBK网页,需要下载中文语言包支持。访问UTF-8编码的网页则不出现这问题。可以直接访问。
GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。
经常有人问网页编写UTF-8和GBK哪个编码好,根据个人需要,如果你主要做中文程序的开发,客户也主要是中国人的话就用GBK吧,因为UTF-8编码的中文使用了三个字节,用GBK节省了空间。
如果做英文网站开发,还是用utf-8吧,因为utf-8中英文只占一个字节。 GBK中英文也是两个字节的,并且国外客户访问GBK要下载语言包。
如果你的网站是中文的,但国外用户也不少,最好也用UTF-8的吧。
String a=”abc”,String b=”abc”,String c=”ab”+”c”,String d = new String(“abc”)用==比较结果
==比较的是对象地址值,equals比较的是对象值,以上a,b,c用==比较返回true,与d比较返回false。要注意绝大多数类重写了equals方法,未重写时比较的是对象地址值。以上由于内存中存在常量池,属于方法区(JDK8后移动到了堆区)中的一部分,创建一个对象后,第二次直接使用,使用new String(“abc”)时,”abc”在常量池中,d所在地址为堆中地址所以返回false。