Perché questo codice non mostra errori di compilazione?In che modo un parametro in un metodo generico può essere assegnato a un intero ea una classe di caratteri contemporaneamente?
public class Generic
{
public static void main(String[] args)
{
Character[] arr3={'a','b','c','d','e','f','g'};
Integer a=97;
System.out.println(Non_genre.genMethod(a,arr3));
}
}
class Non_genre
{
static<T> boolean genMethod(T x,T[] y)
{
int flag=0;
for(T r:y)
{
if(r==x)
flag++;
}
if(flag==0)
return false;
return true;
}
}
Se si scrive un codice normale così (mostrato di seguito)
public class Hello
{
public static void main(String[] args)
{
Character arr=65;
Integer a='A';
if(arr==a) //Compilation Error,shows Incompatible types Integer and Character
System.out.println("True");
}
}
Allora perché sopra sopra è in esecuzione bene, come può T essere di classe integer e array di T essere di classe Character allo stesso tempo, e se è in esecuzione allora perché non sta stampando true, il valore ASCII di 'a' è 97, quindi dovrebbe essere stampato true.
* È possibile confrontare i valori dell'oggetto con altri valori di oggetto solo *. Sembra un po 'scorretto. Dovrebbe essere * È possibile confrontare i riferimenti l'uno con l'altro semplicemente * – CKing
@ Sotirios-Ma quale sarà il tipo di T in per ogni ciclo e perché la sua stampa è falsa? –
@RajMalhotra Perché stai usando '=='. Questo controlla l'identità, non l'uguaglianza. – CKing