Java字符串对象的比较(zz)
2007-03-13 22:50
295 查看
我们知道进行字符串比较需要使用字符串对象String的equals方法。这是
因为操作符 == 进行的是狭义上的比较,而方法equals进行的是广义上的
比较。也就是说,操作符 == 比较的是引用,而方法equals比较的是被引
用的值。用C/C++的术语来说,操作符 == 比较的是指针的值,方法equals
比较的是被指针指向的值。
根据以上认识,我们会认为上述程序片断运行时肯定不会打印s1 = s2,
因为字符串s1和s2是两个不同的String对象,其引用应该是不同的。但是
这样的想法是错误的,因为程序运行时却是打印了s1 = s2。
Java通过重新利用相同的字符串对象从而达到节约系统资源的目的。由于
s1和s2的内容完全相同,因此s1和s2在内存中的地址是完全相同的。正是
因为这样的原因,s1 = s2成立。
那么t1和t2是否象等呢?他们的内容也完全相同。
答案是否定的,因为操作符new强制为t1和t2重新生成新的字符串对象,而
不是重新利用现有的具有相同内容的字符串对象。因此t1和t2在内存中的
地址是不同的,其引用也是不同的。因此,t1 = t2不成立。
小结如下:
1 Java会重复利用现有的字符串对象。
2 操作符new强制生成新的对象。
3 操作符 == 进行狭义上的比较,即引用的比较;方法equals进行广义上
的比较,即被引用的值的比较。
String s1 = "Hello";
String s2 = "Hello";
if (s1 == s2)
{
System.out.println("s1 = s2");
}
String t1 = new String("Hello");
String t2 = new String("Hello");
if (t1 == t2)
{
System.out.println("t1 = t2");
}
因为操作符 == 进行的是狭义上的比较,而方法equals进行的是广义上的
比较。也就是说,操作符 == 比较的是引用,而方法equals比较的是被引
用的值。用C/C++的术语来说,操作符 == 比较的是指针的值,方法equals
比较的是被指针指向的值。
根据以上认识,我们会认为上述程序片断运行时肯定不会打印s1 = s2,
因为字符串s1和s2是两个不同的String对象,其引用应该是不同的。但是
这样的想法是错误的,因为程序运行时却是打印了s1 = s2。
Java通过重新利用相同的字符串对象从而达到节约系统资源的目的。由于
s1和s2的内容完全相同,因此s1和s2在内存中的地址是完全相同的。正是
因为这样的原因,s1 = s2成立。
那么t1和t2是否象等呢?他们的内容也完全相同。
答案是否定的,因为操作符new强制为t1和t2重新生成新的字符串对象,而
不是重新利用现有的具有相同内容的字符串对象。因此t1和t2在内存中的
地址是不同的,其引用也是不同的。因此,t1 = t2不成立。
小结如下:
1 Java会重复利用现有的字符串对象。
2 操作符new强制生成新的对象。
3 操作符 == 进行狭义上的比较,即引用的比较;方法equals进行广义上
的比较,即被引用的值的比较。
String s1 = "Hello";
String s2 = "Hello";
if (s1 == s2)
{
System.out.println("s1 = s2");
}
String t1 = new String("Hello");
String t2 = new String("Hello");
if (t1 == t2)
{
System.out.println("t1 = t2");
}
相关文章推荐
- Java-字符串中对象的比较,详细流程
- java 对象的排序 多字段比较 字符串排序
- java hasmap对象的深复制实现:字节码复制和对象序列化成字符串复制比较。
- java时间(字符串)对象之间的比较/某天时间获取
- Java中字符串String对象的比较
- Java中三种变量的拷贝方法比较: 值变量,对象变量,字符串变量
- Java 比较两个对象是否相等【含字符串,区分与不区分大小写】
- Java基础(11):字符串—深入理解String对象和比较符==和equals的不同
- json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]
- json-lib和jackson进行Java对象到json字符串序列化性能比较
- 黑马程序员-JAVA学习之字符串对象的创建和比较
- Java中字符串对象String、StringBuffer、StringBuilder的比较
- java字符串对象的常用方法
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
- JAVA比较(基本数据类型,对象类型)
- java 创建string对象机制 字符串缓冲池 字符串拼接机制
- 实现Java中对象比较的两个方法
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- Java之使用json-lib进行对象与json字符串之间的转换
- Java List或Map对象和json字符串数据的相互转化