62,614
社区成员
发帖
与我相关
我的任务
分享
public class Test03 {
public static void main(String[] args) {
String str2 = new String("str") + new String("01");
str2.intern();
String str1 = "str01";
System.out.println(str2 == str1); // true
}
}
.source Test03.java
.class public super com/atguigu/string/Test03
.super java/lang/Object
.method public <init> ()V
.limit stack 1
.limit locals 1
.var 0 is this Lcom/atguigu/string/Test03; from l0 to l5
.line 3
l0: aload_0
l1: invokespecial java/lang/Object/<init> ()V
l4: return
.end method
.method public static main ([Ljava/lang/String;)V
.limit stack 5
.limit locals 3
.var 0 is args [Ljava/lang/String; from l0 to l60
.var 1 is str2 Ljava/lang/String; from l35 to l60
.var 2 is str1 Ljava/lang/String; from l43 to l60
.line 5
l0: new java/lang/StringBuilder
l3: dup
l4: new java/lang/String
l7: dup
l8: ldc "str"
l10: invokespecial java/lang/String/<init> (Ljava/lang/String;)V
l13: invokestatic java/lang/String/valueOf (Ljava/lang/Object;)Ljava/lang/String;
l16: invokespecial java/lang/StringBuilder/<init> (Ljava/lang/String;)V
l19: new java/lang/String
l22: dup
l23: ldc "01"
l25: invokespecial java/lang/String/<init> (Ljava/lang/String;)V
l28: invokevirtual java/lang/StringBuilder/append (Ljava/lang/String;)Ljava/lang/StringBuilder;
l31: invokevirtual java/lang/StringBuilder/toString ()Ljava/lang/String;
l34: astore_1
.line 6
l35: aload_1
l36: invokevirtual java/lang/String/intern ()Ljava/lang/String;
l39: pop
.line 7
l40: ldc "str01"
l42: astore_2
.line 9
l43: getstatic java/lang/System/out Ljava/io/PrintStream;
l46: aload_1
l47: aload_2
l48: if_acmpne l55
l51: iconst_1
l52: goto l56
l55: iconst_0
l56: invokevirtual java/io/PrintStream/println (Z)V
.line 10
l59: return
.end method
public class Test03 {
public static void main(String[] args) {
String str2 = new String("str") + new String("01");
str2.intern();
String str1 = "str01";
System.out.println(str2 == str1); // true
}
}
// String var1 = new String("str");
// StringBuilder sb = new StringBuilder(String.valueOf(var1));
// String var2 = new String("01");
// String str2 = sb.append(var2).toString();
public StringBuilder append(Object obj) {
115 return append(String.valueOf(obj));
116 }
117
118 public StringBuilder append(String str) {
119 super.append(str);
120 return this;
121 }
当传进来的是object时,会先调用valueOf转成stringpublic class Test05 {
public static void main(String[] args) {
String str1 = new String("Hello ");
String str2 = new String(" World");
String str3 = str1 + str2;
}
}
.line 5
l0: new java/lang/String
l3: dup
l4: ldc "Hello "
l6: invokespecial java/lang/String/<init> (Ljava/lang/String;)V
l9: astore_1
.line 6
l10: new java/lang/String
l13: dup
l14: ldc " World"
l16: invokespecial java/lang/String/<init> (Ljava/lang/String;)V
l19: astore_2
.line 7
l20: new java/lang/StringBuilder
l23: dup
l24: aload_1
l25: invokestatic java/lang/String/valueOf (Ljava/lang/Object;)Ljava/lang/String;
l28: invokespecial java/lang/StringBuilder/<init> (Ljava/lang/String;)V
l31: aload_2
l32: invokevirtual java/lang/StringBuilder/append (Ljava/lang/String;)Ljava/lang/StringBuilder;
l35: invokevirtual java/lang/StringBuilder/toString ()Ljava/lang/String;
l38: astore_3
的确用到了valueOf
现在又回到你的第一个回答
为什么会提到判断字符串相等?它们和valueOf的相关处在哪里?初学java,很多不懂。所以从解释到结论感觉很突兀。