Java.lang->String java的字符串是常量,它的值在创建后不能修改(字符串里的元素不能修改);
不能用String[索引]的形式来取得对应索引处的元素值
初始化,String s="hello world"等价于 char data[] = {'h', 'e', 'l','l','o',' ','w','o','r','l','d'};,然后String s = new String(data);; StringBuilder、StringBuffer、String区别 String一旦创建不可变,不可进行修改;而StringBuilder、StirngBuffer可变长,可修改,通过setCharAt()方法; 因为StringBuilder线程不安全的性质,适合单线程使用,效率高;StringBuffer提供线程安全支持,适合多线程; Object.toString()
这种形式的返回值并不像我们通常以为的那样,而是一个带有对象字符串hashcode(后面会专门记录hashcode的知识)的字符串形式,即对象的字符串表示形式,反正就不是返回转换后字符串的本身; 所以,没有特殊需求,做题的时候还是不要用这种,用Arrays.toString()这种; 示例:
Arrays.toString(数组)
Arrays类包含用来操作数组(排序、搜索、转换等)各种方法,可以把数组当作列表的静态工厂; 以Arrays.toString(char[] a)为例,它的实例输出如下:
就是以一种这样的形式[字符数组元素1,字符数组元素2,......]输出,源码的确差不多这样:
逻辑很清楚,上面判断就不说了,下面则是以StringBuilder.toString()的形式返回的,那么这不就是Object.toString()的形式吗,为什么会输出字符串而不是之前的带有hashcode的东西? 看看JDK中关于StringBuilder.toString()的介绍:
相当于对toString方法进行了重写(所有对象都是Object的子类,子类对父类方法重写);
果然,但这里的value和count是什么意思,我看了StringBuilder源码里面没有关于它俩的说明,想到这应该是父类的东西,value代表字符数组,count应该是要copy的个数,意思是从索引0开始copy value,共copy count个元素;
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence
1 2 3 取AbstractStringBuilder看看:
的确是这样,count是字符数组使用了的字符个数,而不是分配的空间大小;
所以StringBuilder的toString()方法和普通Object的toString()方法不一样的,前者重新new了一个字符串,后者返回object的带有hashcode的字符串! 示例:
new String() 这个其实也可以不说的,但是还是记录下; 就是当我想在函数中返回一个字符串,Object.toString()肯定用不了,可以用Arrays.toString(数组);还一种方式就是直接new一个字符串,本质应该是一样的:
反正Arrays.toString()的本质也是构建StringBuilder,然后通过StringBuilder.toString()实现,都要新new处一块内存用于存放数组内容;