gpt4 book ai didi

java - Java 代码中奇怪的逻辑错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:11 24 4
gpt4 key购买 nike

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);
}
}

为什么 'a'f1f2 中使用时结果为 false?为什么 f2.Set(f1.Get()); 未注释时结果为真?请解释我哪里出错了。

最佳答案

.isEquals() 方法中,您将包装器对象与 == 运算符进行比较,如果对象引用不在 中,则比较对象引用>Integer 内部缓存。

由于 321 不在 Integer 缓存中,== 运算符返回 false,因为引用是不同的(f1 指的是与f2 不同的内存地址)。

当您显式将引用设置为相等时(使用f2.Set(f1.Get())),程序输出也就不足为奇了是的

如果将 a 设置为 -128127 之间的值,程序将输出 true

关于java - Java 代码中奇怪的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com