JDK1.7后的字符串比较
来源:互联网 发布:windows sever 2003 编辑:程序博客网 时间:2024/06/05 12:50
1 、String a = "123";
String b = "123";
a == b; //true
a.equals(b); //true
2、String a = new String("123");
String b = new String("123");
a == b; //false
a.equals(b); //true
3、String a = new String("123").intern();
String b = new String("123").intern();
a == b; //true
a.equals(b); //true
String b = "123";
a == b; //true
a.equals(b); //true
2、String a = new String("123");
String b = new String("123");
a == b; //false
a.equals(b); //true
3、String a = new String("123").intern();
String b = new String("123").intern();
a == b; //true
a.equals(b); //true
造成上面三种不同结果的分析:
例1:a创建的字符串常量放在了方法区的常量池中,在定义b的时候会先到常量池中查找是否存在该字符串常量。因为存在,所以b直接使用该字符串常量,因此a和b的内容相同,引用也相同。例2:通过String构造方法创建的字符串会直接在堆中产生对应的String类型对象,然后a直接引用该对象。当定义b的时候又会在堆中创建新的对象。因此,尽管a和b的内容相同,但是引用了不同的对象,使得a != b。
例3:在调用String的intern方法的时候,会去常量池中看是否有与该对象内容相同的字符串(即equals为true)。若没有,则将该字符串放到常量池并返回常量池的字符串;若有,则直接返回常量池的字符串。(注意:JDK1.7之前结果不同)
因此下面判断结果:
"123" == new String("123").intern(); //true
"123" == "123".intern(); //true
String a = new String("123");
a == a.intern(); //false
阅读全文
0 0
- JDK1.7后的字符串比较
- 先安装JDK1.7,后安装JDK1.8,更改java -version默认值的方法
- JDK1.7 换成1.8后遇到的meaven异常
- 两个字符串分段后比较
- JDK1.4和JDK1.5的新特征比较
- jdk1.7以后的switch可以匹配字符串
- JDK1.5后的实用新用法
- Singleton---jdk1.6开始后的改变
- 本地安装jdk1.7后,由于Myeclipse使用默认的1.6,如何设置工程支持jdk1.7
- JDK1.5,JDK1.6,JDK1.7 各自的新特性
- JDK1.7的性能
- 字符串的比较
- Java 的字符串比较
- 字符串的比较
- 字符串数组的比较
- 错误的字符串比较
- 1.6 字符串的比较
- 字符串的比较
- 学习vue
- 权限管理系统设计
- MVP详细解析以及使用方法
- he android gradle plugin version 2.4.0-alpha7 is too old, please update to the latest version.
- 删除maven仓库中的LastUpdated文件
- JDK1.7后的字符串比较
- delphi 数组复制利用CopyMemory 最为完美
- XLua笔记-将lua项目和unity工程放到VS中
- 【Qt 编译】QT 工程文件
- postgresql+pgrouting 最短路线sql (4)
- 频道
- Git忽略规则及.gitignore规则不生效的解决办法
- C# 判断用户是手机访问还是电脑访问
- 测试Shutdown