lambda - Strange Logical Error in Java Code -
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 = 321; myfunc<integer> f1 = new myfunc<integer>(a); myfunc<integer> f2 = new myfunc<integer>(a); boolean result; //f2.set(f1.get()); //if uncomment 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 f2: " + result); } } why result false when 'a' used in both f1 , f2? why result true when f2.set(f1.get()); uncommented? please explain me making mistake.
in .isequals() method you're comparing tho wrapper objects == operator, compares objects references if not within integer internal cache.
since 321 out of integer cache, == operator returns false, because references different (f1 refers different memory address f2).
when explicitly set references equal (with f2.set(f1.get())), it's not surprising program outputs true.
if set a between -128 , 127, program output true.
Comments
Post a Comment