字符串

来源:互联网 发布:打开数据漫游会收费没 编辑:程序博客网 时间:2024/05/21 10:22

String类

该类一旦产生一个字符串,其对象就不可变。
- String类使用private final char value[]来实现字符串的存储,也就是说,String对象创建够,就不能再改变此对象中存储的字符串内容。

  • String类有一个特殊的创建方法,就是使用”“双引号来创建,例如new String(“jinder”)实际创建了2个String对象。一个是”jinder”通过”“创建的。另一个是通过new创建的。只不过他们创建的时期不同。一个在编译期,一个在运行期。

  • 运行时期,调用String类的intern方法,就可以向String Pool中动态添加对象。

这里写图片描述

String类的创建方法

  1. 直接使用”“引号创建
  2. 使用new String()创建
  3. 使用new String(“someString”)创建以及其他一些重载构造函数创建
  4. 使用重载的字符串连接符”+”创建

在Java中使用new关键字会创建一个新的对象。不管在String Pool中是否已经有值相同的对象,都会在heap中创建一个新的对象。

    String s1 = new String("777");    String s2 = "aaa777";    Stirng s3 = "aaa" + "777";    String s4 = "aaa" + s1;    System.out.println(s2 == s3); //true    System.out.println(s2 == s4); //false    System.out.println(s2 == s4.intern()); true

line6: 由于s1是变量,在编译期不能确定它的值是多少,所以会在执行的时候创建一个新的String对象存储在heap中,然后赋值给s4.

line7:S4调用intern方法,是s4所引用的对象动态的添加到常量池中。然后与s2比较。因为都在常量池中所以”==”返回true。

StringBuffer

StringBuffer类是字符串缓冲区,跟String类似用来存储字符串数据。如果要修改一个StringBuffer类的字符串,就不需要再穿坚信的字符串对象。StringBuffer类属于java.lang包。
这里写图片描述
示例:在一下程序中,创建了几个对象?

    String A, B, C;    A = "a";    B = "b";    A = A + B;    StringBuffer D = new StringBuffer("abc");    D = D.append("567");

line2: 创建一个对象”a”和一个引用A;

line3: 创建一个对象”b”和一个引用B;

line4: 创建一个对象,并由原来的A来引用,原来A所指向的对象就会变成垃圾对象,等待回收。

line5: StringBuffer的特点是改变对象本身而不创建新的对象,因此第6行都是对同一个对象进行处理。而字符串对象也是一个对象,固有两个对象。

所以,一共创建了5个对象。

面试题目

一、字符串字面量是否自动生成一个String对象

答案是肯定的,字符串类具有一定的特殊性,JVM在执行双引号操作符的时候,会自动创建一个String对象,并返回这个对象的引用

二、StringBuffer和StringBuilder存在的作用是什么?

在Java程序里,如果需要大量拼接字符串的话,应该使用StringBuffer和StringBuilder类,他们可以避免不必要的String对象的产生,以提高程序的性能。他们功能相似,只不过StringBuilder是线程安全的。

0 0
原创粉丝点击