今天掉头发了迈 2022-08-25 23:02 采纳率: 66.7%
浏览 18
已结题

Java中的valueOf问题,划线部分为什么结果不是false?

问题遇到的现象和发生背景

Java中的valueOf问题,划线部分为什么结果不是false?

问题相关代码,请勿粘贴截图
public class WrapperClassCompare {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Integer a = Integer.valueOf(6);
        System.out.println("6的包装类实例是否大于5.0:"+(a>5.0));
        System.out.println("比较两个包装类的实例是否相等:"+(Integer.valueOf(2) == Integer.valueOf(2)));
        
        Integer ina = 2;
        Integer inb = 2;
        System.out.println("两个2自动装箱后是否相等:"+(ina==inb));
        
        Integer biga = 128;
        Integer bigb = 128;
        System.out.println("两个2自动装箱后是否相等:"+(biga==bigb));
        
        System.out.println(Boolean.compare(true, false));
        System.out.println(Boolean.compare(true, true));
        System.out.println(Boolean.compare(false, true));
        
        
    }

}



运行结果及报错内容

img

我的解答思路和尝试过的方法

划线语句应该是相当于在堆中创建两个对象,双等号比较地址值。地址值不同,我认为结果是false.

  • 写回答

1条回答 默认 最新

  • a5156520 2022-08-25 23:20
    关注

    原因应该是:包装类型会调用valueOf方法,将运算符两边的对象都转换为基本类型后再做比较。这就是为何“==”不能使用而“<”、“>”、“<=”、“>=”这几个符号可以使用的原因。(引用自下面的链接)
    参考链接:
    java基础之Integer比较问题_幼儿园里的山大王的博客-CSDN博客_java比较两个integer

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题