2016-04-02 43 views
7

Con codice di esempio qui di seguito perché la prima aggiunta (1/2 + 1/2) stampe 0 ma la seconda stampe aggiunta 00.Java Integer Inoltre con String

System.out.println(1/2+1/2+"=1/2+1/2"); 
System.out.println("1/2+1/2="+1/2+1/2); 

uscita:

0 = 1/2 + 1/2

1/2 + 1/2 = 00

+1

Perché va da sinistra a destra. per il primo sarà '1/2' che è' 0' (divisione intera) e quindi '1/2' che è di nuovo 0. Quindi '0 + 0 = 0' quindi lo concatenerà alla stringa' 1/2 + 1/2'. Per il secondo farà concat (1/2) su 'String'" 1/2 + 1/2 = 'che (1/2) è di nuovo 0 e quindi di nuovo per il prossimo – 3kings

risposta

4

Integer matematica (int 1 diviso per int 2 è int 0, se si desidera un risultato in virgola mobile gettato uno, o entrambi, di 1 e 2 a un tipo a virgola mobile) e ordine delle operazioni, il il secondo esempio è la concatenazione String. Il compilatore si trasforma in che

System.out.println(new StringBuilder("1/2+1/2=").append(1/2).append(1/2)); 

e quindi si ottiene

System.out.println(new StringBuilder("1/2+1/2=").append(0).append(0)); 
0

La prima affermazione "System.out.println (1/2 + 1/2 +" = 1/2 + 1/2 ");" stampa 0 perché un valore intero ottenuto da 1/2 è zero. Il resto viene eliminato e poiché 1/2 equivale a 0,5, il valore .5 viene eliminato. La seconda affermazione "System.out.println (" 1/2 + 1/2 = "+ 1/2 + 1/2);" stampa 00 a causa del segno di concatenazione. Nella seconda affermazione il primo numero 1 è mostrato come +1, quindi l'istruzione viene effettivamente letta come (+1/2 +1/2), motivo per cui restituisce 00. Se la seconda istruzione è stata impostata in questo modo:

System.out.println("1/2+1/2="+ (1/2+1/2)); 

L'output sarebbe lo stesso della prima istruzione.

-2

java presuppone che il risultato della divisione sia intero, poiché i suoi membri sono numeri interi. Per il risultato flottante (0,5) di ogni divisione, il divisore o il dividendo deve essere di tipo flottante

System.out.println ("1/2 + 1/2 =" + (1/2.0 + 1/2.0));

0

L'espressione viene valutata da sinistra a destra. Nel primo caso è int+int (che è 0), quindi int + "= String" che è un String tmp = "0= String". Nell'altro caso hai "" String = "+ int which becomes" String = int "to which you append one more int`. Così stampi String, "0" e "0".