关于Integer的"=="

转载 2015年11月19日 21:31:02
public static void main(String []args) {
		Integer a = 1;
		Integer b = 1;
		Integer c = 200;
		Integer d = 200;
		System.out.println(a == b);
		System.out.println(c == d);
	}


输出结果:

true

false

使用1或者1000赋值给Integer时,Java会翻译为Integer.valueof(xxx),附上源码,在-128到127之间的时候直接return IntegerCache.cahe[]了,因此出现了这个结果

    private static class IntegerCache {
        static final int high;
        static final Integer cache[];

        static {
            final int low = -128;

            // high value may be configured by property
            int h = 127;
            if (integerCacheHighPropValue != null) {
                // Use Long.decode here to avoid invoking methods that
                // require Integer's autoboxing cache to be initialized
                int i = Long.decode(integerCacheHighPropValue).intValue();
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - -low);
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }

        private IntegerCache() {}
    }

    /**
     * Returns a <tt>Integer</tt> instance representing the specified
     * <tt>int</tt> value.
     * If a new <tt>Integer</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }


Java 的Integer、int与new Integer到底怎么回事?

先做一些总结,询问了些经验比较多的师傅,在这里表示感谢,然后自己总结下,今天的收获分享给大家: 1. int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较。...
  • wangyang1354
  • wangyang1354
  • 2016年09月22日 16:27
  • 5702

踩坑笔记之Integer数值比较

很多东西,表面上看起来挺简单,实际上别有洞天,一不小心就是一个坑。记录一下昨天遇到的Integer数值比较所遇到的“奇葩BUG”。 1.问题场景 先看如下一段代码if(activity.getTot...
  • song19890528
  • song19890528
  • 2015年11月06日 09:24
  • 591

int和Integer有什么区别?

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper c...
  • zero__007
  • zero__007
  • 2016年04月25日 21:10
  • 4973

Java中Integer类的详解与用途

java.lang 类 Integer java.lang.Object   java.lang.Number       java.lang.Integer 所有已实现的接口: Se...
  • litong09282039
  • litong09282039
  • 2015年06月01日 13:47
  • 2546

Java大用处——Integer类常用的方法举例

Integer类在包Java.lang下面,包含了很多方法,我就写了一些常用的方法: package test20170223; import java.util.*; public class T...
  • sum_TW
  • sum_TW
  • 2017年02月26日 23:00
  • 2629

Integer初始赋值后对象之间==操作详细解析

先看下面一段有意思的代码,来检测一下自己的基本功: Integer a = 1000; Integer b = 1000; Integer c = 100; Integer d...
  • xiangnan129
  • xiangnan129
  • 2016年11月03日 12:23
  • 1287

Integer,new String 判断相等,值传递,以及引用传递的关系。

Integer,new String 判断相等,值传递,以及引用传递的关系。 总结: 1.Integer和String,参数引用的时候都是值传递的。StringBuffer和其他对象就都是...
  • mawming
  • mawming
  • 2016年03月21日 14:01
  • 357

Java基础之int和Integer有什么区别

1 Java两种数据类型分类原始数据类型,分为boolean,byte,in,char,long,short,double,float 引用数据类型 ,分为数组,类,接口2 Java为每个原始类型提...
  • chenliguan
  • chenliguan
  • 2016年12月26日 17:47
  • 3345

Integer比较时最好不要用==

class Test {     public static void main(String[] args) {         Integer i1 = new Integer(5);   ...
  • u013145194
  • u013145194
  • 2016年05月17日 14:01
  • 3279

Java Integer值范围问题

package com.test; public class Test {    public static void main(String []args) {      Integer a ...
  • shengfeixiang
  • shengfeixiang
  • 2013年02月23日 22:49
  • 10453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Integer的"=="
举报原因:
原因补充:

(最多只允许输入30个字)