2013-06-29 8 views
7

Qual è il valore di questo? da qualche parte ho letto che in C# (questo == null) è possibile. Ma che dire di Java? Quello, il seguente frammento restituirà mai true?Il riferimento "questo" è mai nullo in Java

if(this!=null) 
{ 
    return false; 
} 
else 
{ 
    return true; 
} 
+0

Per coloro che (come me) possono "ingannare l'idea che' this' * potrebbe essere * 'null', leggi questo Q & A - http://stackoverflow.com/questions/3143498/why-check-this-null –

+1

@ StephenC..Grazie –

risposta

7
if(this!=null) 

È possibile che questo restituisce sempre true, il che significa che il primo ramo del if otterrete sempre eseguito, e la funzione restituisce sempre false.

+0

@StinePike Certamente. Qualcuno ha suggerito diversamente? In questa risposta? Il tuo punto? – EJP

+0

@EJP .. oh all'inizio npe ha scritto che non è valido .. Non ho visto che ha cambiato il testo .. Così come ha modificato, ho cancellato quel commento :) – stinepike

+0

@EJP: All'inizio la domanda posta su 'this =! null', a cui ho detto che la sintassi non era valida. Quindi il '=!' È stato cambiato in '! =', Quindi ho modificato la risposta in modo che corrisponda alla domanda. Da qui la confusione. – NPE

0

All'interno di un metodo di istanza o di un costruttore, this è un riferimento all'oggetto corrente. Pertanto non è mai null.

+0

Mai falso, vuoi dire. Il test è! = Null. – EJP

+0

No, @ EJP l'istanza. Ne ho parlato anche adesso. Retruns sempre falso. –

+0

Che "istanza"? Il test nel codice dell'OP è (this! = Null). Questo test non può mai essere falso. 'Dal momento che è una sintassi valida' non ha nulla a che fare con esso in entrambi i modi. – EJP

1

this non può mai essere null. Perché questo si riferisce all'istanza auto dell'oggetto. Ed è accessibile solo quando un oggetto è già stato creato.

così il blocco else è irraggiungibile.

1

"questo" non può mai essere nullo in Java

.....?

if(this!=null) 
{ 
return false; 
} 
1

this significa oggetto corrente che non può mai essere nullo.

0

"questa" parola chiave si riferisce alla "che" oggetto, che si fa riferimento a ..

class Sample 
{ 
    int age; 
    Sample(int age) 
    { 
    this.age = age; // this.age -> the variable a in the that current instance 
    } 
    public void display() 
    { 
    System.out.println(age); //age here is actually this.age 
    } 
} 
public class XYZ 
{ 
public static void main(String[] args) 
{ 
    Sample a,b; 
    a.display(); 
    b.display(); 
} 
} 
0

Basti pensare logicamente - che è come dire If I don't exist....

La cosa che attualmente ha il controllo del codice deve esistere, altrimenti il ​​codice non sarebbe in esecuzione in primo luogo.

+0

Non fare generalizzazioni del genere. In alcune lingue, "questo" potrebbe in alcune circostanze essere nullo. – newacct

Problemi correlati