String,StringBuffer处理字符串的区别

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()方法,是获取字符串的长度的

posted @ 2019-12-25 20:20  大海中的海洋  阅读(348)  评论(0编辑  收藏  举报