当我正在执行此代码时,写入+将我的整数转换为String.
public class Test {
public static void main(String...string){
int m=9;
int k=10;
String s=new String(m +"");//automatic type conversion from int to string
String j=m+"" +k;////automatic type conversion from int to string
System.out.println(s+j);
String s1=String.valueOf(m);
System.out.println(s1);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法理解+这里做了什么,以及如何将其转换为String.这是否与=运营商的从右到左优先级有关?
这是否与=操作员从右到左的优先级有关?
答:没有
它也与Integer Type无关.为什么?因为这是JSL所说的
字符串转换仅适用于binary +运算符的操作数,当另一个操作数是String时,该操作数不是String.
在这个特殊情况下,+的非String操作数转换为String(第5.1.11节),+运算符的计算按照§15.18.1的规定进行.
因此,即使您编写任何其他类型变量,它也会转换它.考虑这个片段
public static void main(String...string){
double u=9.0;
System.out.println(u+"hi");
}
Run Code Online (Sandbox Code Playgroud)
它给了我输出
9.0hi
Run Code Online (Sandbox Code Playgroud)
现在来了怎么样?
对于我发布的代码片段这里是编译代码的一部分
public static void main(java.lang.String...);
flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS
Code:
stack=5, locals=3, args_size=1
0: ldc2_w #16 // double 9.0d
3: dstore_1
4: getstatic #18 // Field java/lang/System.out:Ljav
a/io/PrintStream;
7: new #24 // class java/lang/StringBuilder
10: dup
11: dload_1
12: invokestatic #26 // Method java/lang/String.valueOf
:(D)Ljava/lang/String;
15: invokespecial #32 // Method java/lang/StringBuilder.
"<init>":(Ljava/lang/String;)V
18: ldc #35 // String hi
20: invokevirtual #37 // Method java/lang/StringBuilder.
append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
23: invokevirtual #41 // Method java/lang/StringBuilder.
toString:()Ljava/lang/String;
26: invokevirtual #45 // Method java/io/PrintStream.prin
tln:(Ljava/lang/String;)V
Run Code Online (Sandbox Code Playgroud)
所以在内部调用valueOf()方法将double或非字符串操作数append()转换为String,然后调用将其完全转换为String.希望这可以帮助你:)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |