jdk1.6与jdk1.7以后的intern方法区别

public class Test {  public static void main(String[] args) {
        String z = new String("a") + new String("b");//常量池内生成"a" "b",堆中匿名对象a,b,ab,然后对象引用z指向ab对象  String y = z.intern();//常量池内没有"ab",所以匿名对象ab,成为常量"ab",对象引用y指向匿名对象ab也相当于指向常量"ab",  System.out.println(z == y);//true  System.out.println(y == "ab");//true String g = new String("ab");//堆中创建对象值为ab赋予对象引用g  System.out.println(y == g);//对象引用y指向的是常量池中的常量,而g指向的是堆中值为"ab"的对象引用,因此为false  String a = "x" + new String("y");//常量池中创建"x","y",堆中创建对象,a引用堆中对象  String c = "x" + "y";//编译器会进行优化相当于c = "xy",上一步编译器不会进行优化  String b = "xy";  System.out.println(a == b);//false  System.out.println(b == c);//true  }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-19 14:56
点赞 评论 收藏
分享
10-28 17:30
已编辑
华东交通大学 Java
想进开水团喝开水:字节的hr的本职工作就是黄金矿工
秋招笔试记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务