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

时间:2015-05-16 09:14:52

标签: java casting

当我执行此代码时,编写+正在将我的整数转换为字符串。

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);
}

}

我无法理解+在这里做了什么,以及它是如何转换为字符串的。这是否与=运算符的从右到左优先级有关?

2 个答案:

答案 0 :(得分: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");


} 

它给我输出

9.0hi

现在来了?

我发布的代码段 以下是此

的已编译代码的一部分
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

因此在内部它调用valueOf()方法将双字符串或非字符串操作数转换为String,而不是调用append()将其完全转换为字符串。 希望这可以帮助你:)

答案 1 :(得分:0)

我想让答案更简单,因此我发布了这个。

'+' is the only operator in java that is overloaded for String type for string concatenation

因此,如果两个操作数中的任何一个是String ..整个操作都会被重载以进行连接。

所以string+(any other datatype) = string. 因此,对于任何其他操作数,请使用括号和字符串

所以5+5+"" =55

(5+5)+"" = 10

注意:它与从右到左优先级无关