venerdì 8 novembre 2013

Q50

Give:
public class Test {
     public static void main(String[] args) {
          String svar = "sports cars";
          svar.replace(svar, "convertibles");
          System.out.printf("There are %3$s %2$s and %d trucks.", 5, svar, 2 + 7);
     }
}


 
What is the result?
 
A.
There are 27 sports cars and 5 trucks
 
B.
There are 27 convertibles and 5 trucks
 
C.
There are 9 sports cars and 5 trucks
 
D.
There are 9 convertibles and 5 trucks
 
E.
IllegalFormatConversionException is thrown at runtime
 
 
La risposta è D
La risposta è C

svar viene inizializzato a "sports cars" ma il replace la sostituisce interamente con "convertibles"

svar viene inizializzato a "sports cars" . Il replace la sostituisce interamente con "convertibles" ma svar non viene modificata, quindi rimane uguale in valore a "sports cars".

printf() stampa la stringa sostituendo le parti che rispettano la sintassi , quindi :

%3$s è il terzo ingresso scritto come stringa quindi 2+7.
Prima della stampa viene eseguita la somma (+) e quindi
%3$s=9
          %2$s è il secondo igresso scritto come stringa e quindi è il valore di svar e cioè:
%2$s=convertibles
%2$s= sports cars

%d è il primo ingresso scritto come digit e quindi
%d=5

Perciò si stampa There are 9 sports cars and 5 trucks
 
Per vedere effettivamente la sostituzione di “sports cars” con “convertibles” questa riga di codice :
svar.replace(svar, "convertibles");
deve essere sostituita con
svar = svar.replace(svar, "convertibles");

3 commenti:

  1. Hi I taken 803.with ur blog i have successfully complted. thanks for ur support....

    so i am planning to take 804 also please give me ur support..

    RispondiElimina
  2. La risposta è C non D. Le String sono immutabili e quindi replace non agisce direttamente sulla stringa, ma crea un nuovo oggetto. Poiché la String restituita da replace non viene assegnata di nuovo a svar, la reference punta ancora alla stringa "sports cars". Basta eseguire il codice per averne la prova.

    RispondiElimina
  3. Vero, ho corretto la risposta.
    Grazie.

    RispondiElimina