/ / Como e por que um inteiro é tipificado em String ao usar “+”? - java, casting

Como e por que um inteiro é convertido para String quando usa "+"? - java, fundição

Enquanto estou executando este código, escrevendo + está convertendo meu inteiro em uma 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);
}

}

Eu não consigo entender o que + está fazendo aqui, e como está sendo convertido em uma String. Isso tem algo a ver com a precedência direita para esquerda do = operador?

Respostas:

7 para resposta № 1

Isso tem algo a ver com a precedência da direita para a esquerda de = operador?

Responda: Não

E tem não tenho nada a ver com o tipo inteiro também. Porque ? Porque Aqui está o que JSL dizer

A conversão de string aplica-se apenas a um operando do operador binário + que não é uma String quando o outro operando é uma String.

Neste único caso especial, o operando não String para o + é convertido em uma string (§5.1.11) e avaliação do operador + procede conforme especificado em §15.18.1.

Portanto, mesmo se você escrever qualquer outro tipo de variável, ele irá convertê-lo. Considere este trecho

public static void main(String...string){
double u=9.0;
System.out.println(u+"hi");


}

Isso me dá saída

9.0hi

Agora vindo para como?

Para o snippet de código que postei Aqui está a parte do código compilado deste

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

Então, internamente, ele invoca valueOf() método para converter operando duplo ou não string em String e então invoca append() para convertê-lo em String totalmente. Espero que isso ajude você :)


0 para resposta № 2

Quero tornar a resposta mais simples, portanto, estou postando isso.

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

Portanto, se qualquer um dos dois operandos for String ... toda a operação é sobrecarregada para concatenação.

assim string+(any other datatype) = string. Então, para quaisquer outros operandos, use parênteses junto com string

assim 5+5+"" =55

e (5+5)+"" = 10

NOTA: Não tem nada a ver com a precedência da direita para a esquerda