使用"+"时,整数如何以及为什么将字符串转换为String?

use*_*034 2 java casting

当我正在执行此代码时,写入+将我的整数转换为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.这是否与=运营商的从右到左优先级有关?

Ank*_*and 7

这是否与=操作员从右到左的优先级有关?

答:没有

也与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.希望这可以帮助你:)