Java中的String

以下总结,基于 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); // false
System.out.println(str1.equals(str2)); // true

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

String str1 = "hello,world!";
String str2 = "hello," + "world!";
System.out.println(str1 == str2); // true
String 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值