Java中的String

来源:互联网 发布:最近网络疯传的名校 编辑:程序博客网 时间:2024/05/29 12:37

以下总结,基于 JDK1.7 版本。

String对象

String类虽然不是Java的八种基本数据类型之一,但是也可以像基本数据类型一样直接通过字面量赋值,当然也可以通过new来实例化一个字符串对象。但是字面量赋值和new创建一个字符串对象的方式有本质的区别。

  • 字面量赋值
    这种方式首先会在方法区常量池中查找字符串,若存在内容相同的字符串,则新对象的引用直接指向这个字符串。若不存在,则在常量池中生成内容相同的新字符串,然后让对象的引用指向它

  • new 创建新对象
    通过new的方式创建新的字符串对象,会直接在堆中分配内存,引用指向新对象。

字符串的比较

== 运算符比较的是内存中的引用地址,equals()方法比较的是对象的内容,因此下列代码的输出是:

String str1 = "hello world!";String str2 = new String("hello world!");System.out.println(str1 == str2); // falseSystem.out.println(str1.equals(str2)); // true

字符串常量的 + 运算,会在编译期间,将多个字符串常量合并成一个,而字符串对象的 + 实际上是使用StringBuilder.append()来完成的,因此:

String str1 = "hello,world!";String str2 = "hello," + "world!";System.out.println(str1 == str2); // trueString str3 = "hello,";String str4 = "world!";String str5 = str3 + str4;System.out.println(str1 == str5); // false

String.intern()方法

intern()方法会将字符串对象的引用添加到字符串常量池中,然后返回这个引用。如果常量池中已经存在了相同内容的字符串,那么直接返回这个字符串的引用。因此下面这段代码的输出是:

String str1 = new String("hello,world!");String str2 = "hello,world!";String str3 = str1.intern();System.out.println(str2 == str3); // true

String.compareTo()方法

s1.compareTo(String s2)方法会根据字典顺序比较两个字符串,返回值有三种。
- 第一种是比较到第一个不同位置k时,返回两个字符的Unicode码的差值s1[k] - s2[k]
- 第二种是一个比完另一个还有,则返回两个字符串的长度的差值s1.length() - s2.length()
- 第三种就是两个字符串内容完全一样,返回 0

原创粉丝点击