java中Integer i1= 0; Integer i2= 0; 为什么可以用 == 符号呢

java中Integer i1= 0; Integer i2= 0;  有i1 == i2,且有i1 = 1;那么i2为什么不会变成1呢?

我这个时候的想法是:这是因为java中整型常量是基于int的,而java中有自动包装机制,也就是说看起来i1,i2是Integer类型,但是其底层还是基于int类型的(不能理解的话在java中还有一个地方那就是Arrays.asList(T...args) 他返回一个基于数组的List,如果在List中改变其大小,那么将会引发异常[UnsupportedOperationException]),所以指向的是同一个值(int),那么可以用==符号也就可以理解了,而如果你通过new Integer(0) 赋值给i1 那么,由于是在新堆中新开辟了一块内存,所以用 == 符号在相同对象之间是比较内存地址,那么肯定是false,且不说相同对象,又因为其中i2是基于int类,在潜在比较重就是返回一个false了,虽然表面上看起来他们是相同类型!!

时间: 2024-10-18 05:23:51

java中Integer i1= 0; Integer i2= 0; 为什么可以用 == 符号呢的相关文章

Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数

总结一下最近做的东西中遇到的问题 1. Java 中的 int 与 Integer 用于 List<Integer>  时 两者之间的关系都是很清楚的,int 是基本数据类型,存储的是值,而 Integer 是引用数据类型,存储的是指向数值的地址. Integer 是在类层面上对 int 的封装.然后 Java 提供了自动装包拆包机制,使得两者之间可以转换.这里主要是测试了下它们用于 List 时候的疑惑. /* * To change this template, choose Tools

Java中String类与Integer类的几个方法

计算诸如-123,456,789 + 123,123的值 import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); String str1, str2; BigInteger a, b; while(cin.hasNext()){ str1 = cin.

Java中的int和Integer

代码: 1 public class Test{ 2 3 public static void main(String[] args){ 4 Integer i01 = 59; 5 int i02 = 59; 6 Integer i03 = Integer.valueOf(59); 7 Integer i04 = new Integer(59); 8 System.out.println(i01==i02); 9 System.out.println(i01==i03); 10 System.o

在JAVA中 解析String,形如(0&lt;p&lt;10 or 0&lt;=p&lt;10 or 0&lt;p&lt;=10 or 0&lt;=p&lt;=10)的字符串,看所传入的参数是否在表达式内

今天在项目中需要解析一个参数范围的字符串,然后判断一个传入参数是否在这个表达式内.因为参数范围字符串是(0<p<10 or 0<=p<10 or 0<p<=10 or 0<=p<=10)的组合,所以我觉得直接去进行split处理比较麻烦,就运用了String转为 byte[] 再做处理.代码如下. 不知道大家有没有更好的处理方式. package test_lzg; import java.util.ArrayList; import java.util.L

Java 中list==null与list.size( )==0的区别

1.list==null,意味着list压根没有地址,在堆内就不存在. 2.list.size( )= 0,意思是堆内有list,但是还没有放元素,其长度随着元素数量变化而变化,暂时为零. 3.list如果为null的话,说明没有进行初始化.这是list调用任何的方法都会抛出空异常.list.size( )==0说明list已经被new过,但      是里面没有值. 4.判断时一定要注意先后顺序,如果连杯子(list)都没有,直接判断是否有水(list.size( )),是会报NullPoin

Java中Integer与int类型的装箱和拆箱

其实Integer与int类型的赋值与比较最关键的一点就是:这两个变量的类型不同.Integer是引用类型,int是原生数据类型.         我们分四种情况来讨论:         1) Integer与int类型的赋值                 a.把Integer类型赋值给int类型.此时,Integer类型变量的值会自动拆箱成int类型,然后赋给int类型的变量,这里底层则是通过调用intValue()方法来实现所谓的拆箱的.                 b.把int类型赋

在java中使用solr7.2.0 新旧版本创建SolrClient对比

在Java中使用solr 版本7.2.0 solrj已经更新到了7.2.0,新版本solr获取SolrClient的方式也和之前旧版本有所不同 solr6.5开始不推荐直接使用HttpSolrClient的构造方法创建SolrClient(6.5之前版本的创建方式在页末) 从7.0.0开始删除了HttpSolrClient创建客户端的构造方法,使用内部类Builder构建SolrClient 安装solr:https://my.oschina.net/u/2931319/blog/1595303

关于Java编程,int和Integer有OA现金盘网站开发什么区别?

int是我们OA现金盘网站开发haozbbs.com Q1446595067常说的整型数字,是Java的8个原始数据类型之一.Java语言虽然号称一切都是对象,但原始数据类型是例外. Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算.int和字符串之间转换等.在Java 5中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java可以根据上下文,自动进行转换,极大地简化了相关编程. 知识扩展 1.理解自动装箱.拆箱 自动装箱

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

Java中mod和%区别

今天闲来无事,看到篇HashMap工作原理的博客,在上面看到了mod(取模),就想到取余符号%. 然后就查看了一些资料,现在总结下: Java中的取模和求余方式: 1.取模demo         package com.lbb.test;             import java.math.BigInteger;         public class RomTest {         public static void main(String[] args) {