六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 44|回复: 0

String..

[复制链接]

升级  24.67%

23

主题

23

主题

23

主题

秀才

Rank: 2

积分
87
 楼主| 发表于 2013-1-19 04:06:57 | 显示全部楼层 |阅读模式
今天关于String看到一个测试:
 
String a = "abc";        String b = "abc";        String ab = "ab";        String c = ab+"c";        String d = "ab"+"c";                System.out.println(a == b);        System.out.println(a == c);        System.out.println(a == d); 结果当然是true,false,true;
 
用javap反编译来解释一下:
 
Code:   0:ldc#2; //String abc   2:astore_1   3:ldc#2; //String abc   5:astore_2   6:ldc#3; //String ab   8:astore_3   9:new#4; //class java/lang/StringBuilder   12:dup   13:invokespecial#5; //Method java/lang/StringBuilder."<init>":()V   16:aload_3   17:invokevirtual#6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   20:ldc#7; //String c   22:invokevirtual#6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   25:invokevirtual#8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;   28:astore4   30:ldc#2; //String abc   32:astore5   34:getstatic#9; //Field java/lang/System.out:Ljava/io/PrintStream;   37:aload_1   38:aload_2   39:if_acmpne46   42:iconst_1   43:goto47   46:iconst_0   47:invokevirtual#10; //Method java/io/PrintStream.println:(Z)V   50:getstatic#9; //Field java/lang/System.out:Ljava/io/PrintStream;   53:aload_1   54:aload4   56:if_acmpne63   59:iconst_1   60:goto64   63:iconst_0   64:invokevirtual#10; //Method java/io/PrintStream.println:(Z)V   67:getstatic#9; //Field java/lang/System.out:Ljava/io/PrintStream;   70:aload_1   71:aload5   73:if_acmpne80   76:iconst_1   77:goto81   80:iconst_0   81:invokevirtual#10; //Method java/io/PrintStream.println:(Z)V   84:return 
第一个println是比较astore_1和astore_2,而它们指向的常量池中#2号字符串常量“abc”,所以,a==b;
第二个println是比较astore_1和astore 4,分别指向#2和#7,所以a!=c;
第三个println是比较astore_1和astore 5,都是#2,结果就很明显了;
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表