Java Integer == 以及分析

Java Integer ==

先看一下这段代码

Integer integer1 = 100;
Integer integer2 = 100;
System.out.println("integer1 == integer2:"+(integer1==integer2));
Integer integer3 = 1000;
Integer integer4 = 1000;
System.out.println("integer1 == integer2:"+(integer3==integer4));

输出结果:

很久之前就知道这里有个坑,今天看到别人分析了一下Integer.java的源代码才知道具体是为什么

Integer.java

可以看出来使用Integer.valueOf(i)的时候并不会立即new一个Integer对象,而是先判断是否在缓存数组里面

不知道称作缓存是不是不太合适

IntegerCache是一个嵌套类(静态内部类)

在静态初始化块中完成的初始化,在这里确定的范围是-128~127

包装器获取的时候会调用 Integer.valueOf(i)

Java核心技术里面有提到,之前一直也没注意

所以直接new 创建一个Integer 使用==比较还是会false

Integer integer = new Integer(100);
System.out.println("integer1 == integer2:"+(integer1==integer));

integer1 == integer2:false

为了以后避免这种坑,还是使用 equals比较好

当然,要判断 == null

以后遇到问题还是多看一下源码比较好

原文地址:https://www.cnblogs.com/stdpain/p/10656824.html

时间: 2024-08-28 17:42:27

Java Integer == 以及分析的相关文章

Java Integer类分析

public static final int   MIN_VALUE = 0x80000000;  -2^31 public static final int   MAX_VALUE = 0x7fffffff; 2^31-1 public static String toString(int i, int radix) 该方法返回一个字符串形式的参数,第二个参数为指令的基数,将第一个参数转换为以第二个参数为基数的字符串 package com.yiibai; import java.lang.

Java之内存分析和String对象

http://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中). 堆(heap):存放所有new出来的对象. 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外

Java 动态代理分析

Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于cglib的动态代理不要求委托类实现接口. 接下来主要分析一下基于jdk的动态代理的实现原理. 一 动态代理例子 首先来看一个动态代理的例子: # 测试类,主要功能是生成代理类并调用代理方法 TargetFactory.javapublic class TargetFactory { public

《Java源码分析》:Vector

<Java源码分析>:Vector 虽然,Vector集合在我们的编程中,使用的比较少,至少我使用的比较少,一般情况下,我都是倾向于使用List来存储一些同类型的元素. 其实,Vector的内部实现和ArrayList的内部实现基本一致,内部都是借助于数组来实现的.下面就一起来分析下. HashMap类的源码分析,博客在这里:http://blog.csdn.net/u010412719/article/details/51980632 Hashtable类的源码分析,博客在这里:http:/

《Java源码分析》:HashMap

<Java源码分析>:HashMap 看过很多次HashMap的源码了,但是,每次都没有做记录,因此,每次记忆都不太深,今天在看别人博客时提到Hashtable是线程安全的,Hashtable中的方法都用了synchronized进行了同步,于是就看了下Hashtable的源码,在看的过程中,写了篇博客,现在2016年7月20日22:03:53,还在教研室,感觉回寝室还早,因此,决定再看下HashMap的源码,也随便以写博客的形式做点笔记. 还是很看其他类的源码一样,先看构造函数,然后看一些比

Java静态代码分析工具Infer

Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

推荐一款Java代码Bug分析插件 FindBugs

findBugs是一个能静态分析源代码中可能会出现Bug的Eclipse插件工具. 下载之后,把解冻后的文件拷贝到 $ECLIPSE_HOME/plugins/目录下,重新启动eclipse即完成安装. FindBugs的设置: 安装好之后,可以通过 Projects > Property > FindBugs标签对其进行设置.设置方法可以根据自己的需要进行调整. 另外在 问题(Proplems)列表窗口(Windows > 视图 > 问题)的Filter设置里,把FindBugs

Java线程Dump分析工具--jstack

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:      jstack [-l][F] pid      如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题.另外,jstack工具还可