interface New<T> {
boolean func(T n, T v);
}
class MyFunc<T>{
T val;
MyFunc(T val){
this.val = val;
}
void Set(T val){
this.val = val;
}
T Get(){
return val;
}
boolean isEqual(MyFunc<T> o){
if(val == o.val) return true;
return false;
}
public class Main {
static <T> boolean check(New<T> n , T a, T b){
return n.func(a,b);
}
public static void main(String args[]){
int a = 321;
MyFunc<Integer> f1 = new MyFunc<Integer>(a);
MyFunc<Integer> f2 = new MyFunc<Integer>(a);
boolean result;
//f2.Set(f1.Get()); //if i uncomment this line result become true
System.out.println(f1.val + " " + f2.val);
System.out.println();
result = check(MyFunc::isEqual, f1, f2);
System.out.println("f1 isEqual to f2: " + result);
}
}
Pourquoi résultat est faux quand 'a'
est utilisé dans les deux f1
et f2
? Pourquoi le résultat est-il vrai lorsque f2.Set(f1.Get());
est décommenté? S'il vous plaît expliquez-moi où je fais une erreur.étrange erreur logique dans le code Java
Cela n'a pas de sens que le résultat soit ** false ** quand j'ai utilisé 'a' dans' f1' et 'f2'. et il devient ** vrai ** quand j'utilise 'f2.Set (f1.Get());' –