Domande di intervista Java difficili

Qualche tempo fa ho scritto un articolo su Top 50 Domande di Programmazione Java. Ai nostri lettori è piaciuto molto. Quindi oggi daremo un’occhiata a alcune domande d’intervista trabocchetto in Java.

Domande d’Intervista Trabocchetto Java

Queste sono domande di programmazione ma a meno che non si abbia una comprensione approfondita di Java, sarà difficile indovinare l’output e spiegarlo.

1. Null come Argomento

Abbiamo funzioni sovraccaricate e stiamo passando null. Quale funzione verrà chiamata e quale sarà l’output del programma?

public class Test {
	public static void main(String[] args) {
		foo(null);
	}
	public static void foo(Object o) {
		System.out.println("Object argument");
	}
	public static void foo(String s) {
		System.out.println("String argument");
	}
}

2. Usare “L” per long

Riuscite ad indovinare l’output delle seguenti dichiarazioni?

long longWithL = 1000*60*60*24*365L;
long longWithoutL = 1000*60*60*24*365;
System.out.println(longWithL);
System.out.println(longWithoutL);

Spiegazione della Domanda Trabocchetto sull’Argomento Null

Secondo le specifiche di Java, in caso di sovraccarico, il compilatore sceglie la funzione più specifica. Ovviamente la classe String è più specifica della classe Object, quindi stamperà “argomento String”. Ma, cosa succede se abbiamo un altro metodo nella classe come mostrato di seguito.

public static void foo(StringBuffer i){
	System.out.println("StringBuffer impl");
}

In questo caso, il compilatore di Java genererà un errore del tipo “Il metodo foo(String) è ambiguo per il tipo Test”. String e StringBuffer non hanno una gerarchia di ereditarietà. Quindi nessuno dei due è più specifico dell’altro. Un metodo è più specifico di un altro se ogni invocazione gestita dal primo metodo potrebbe essere passata all’altro senza errori di tipo durante la compilazione. Possiamo passare String come parametro agli argomenti di tipo Object e String ma non al metodo con argomento di tipo StringBuffer.

Spiegazione per la variabile Long

L’output del frammento di codice sarà:

31536000000
1471228928

Stiamo creando esplicitamente la prima variabile come long aggiungendo un suffisso “L”. Così il compilatore lo tratterà come long e lo assegnerà alla prima variabile. Per la seconda istruzione, il compilatore eseguirà il calcolo e lo tratterà come un intero a 32 bit. Poiché l’output è al di fuori dell’intervallo del valore massimo dell’intero (2147483647), il compilatore troncherà i bit più significativi e quindi lo assegnerà alla variabile. Equivalente binario di 1000*60*60*24*365L = 011101010111101100010010110000000000 (36 bit). Dopo aver rimosso i 4 bit più significativi per ospitare nell’intero a 32 bit, il nuovo valore = 01010111101100010010110000000000 (32 bit). Questo è uguale a 1471228928 e quindi l’output. Recentemente ho creato una serie di video su YouTube per i programmi ingegnosi di java.

Puoi controllare altri esempi di programmi java dal nostro Repository GitHub.

Source:
https://www.digitalocean.com/community/tutorials/java-tricky-interview-questions