首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

String.

2012-12-18 
String..今天关于String看到一个测试:?String a abcString b abcString ab abString c a

String..

今天关于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,结果就很明显了;

热点排行