zoukankan      html  css  js  c++  java
  • Integer一类的比较问题

    总体主要分为两个方面
    ①比较的是值
    一、基本数据类型与引用数据类型进行比较时,引用数据类型会进行拆箱(自动拆装箱需要在jdk1.5以上),然后与基本数据类型进行值的比较
    举例:
    int i = 12;
    Integer j = new Integer(12);
    i == j 返回的是true


    二、引用数据类型与基本数据类型进行比较(equals方法),基本数据类型会进行自动装箱,与引用数据类型进行比较,Object中的equals方法比较的是地址,但是Integer类已经重写了equals方法,只要两个对象的值相同,则可视为同一对象,具体看API文档,所以这归根到底也是值的比较!
    举例:
    int i = 12;
    Integer j = new Integer(12);
    j.equals(i) 返回的是true


    ②比较的是地址
    一、如果引用数据类型是这样 Integer i = 12;直接从常量池取对象,这是如果数值是在-128与127之间,则视为同一对象,否则视为不同对象
    举例:
    Integer i = 12; Integer j = 12; i == j 返回的是true
    Integer i = 128; Integer j = 128; i == j 返回的是false

    在编译Integer i = 12的时候,被翻译成Integer i = Integer.valueOf(12),而valueOf()会对-128到127之间的数进行缓存。

    二、如果引用数据类型是直接new的话,不管值是否相同,这时两个对象都是不相同的,因为都会各自在堆内存中开辟一块空间
    举例:
    Integer i =new Integer(12);
    Integer j = new Integer(12);
    i == j 这时返回的是false


    三、从常量池取对象跟new出来的对象也是不同的
    举例:
    Integer i = 12;
    Integer j = new Integer(12)
    i == j 这时返回的是false,一个是常量池的,一个是堆中的。

  • 相关阅读:
    bug案例 php 生成csv文件 下载打开文件 提示 文件格式与文件扩展名指定的格式不一致 提示 是SYLK 文件解决方法
    php 三元运算 ?: 和 ?? 认识
    mysql 索引知识
    算法 之 红黑平衡二叉树
    算法 计算机中树的分类 概念树
    mysql B+树
    算法 之 二叉树的前序 中序 后序遍历
    mysql B树分析
    mysql 坑位之 GROUP_CONCAT 函数使用
    HTTP请求:GET与POST方法的区别
  • 原文地址:https://www.cnblogs.com/wangshen31/p/10476105.html
Copyright © 2011-2022 走看看