简单了解java中int和Integer的区别

这篇文章主要介绍了简单了解java中int和Integer的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1、Integer是int的包装类,int则是java的一种基本数据类型

2、Integer变量必须实例化(new 一下是最常见的实例化)后才能使用,而int变量不需要

3、Integer实际是对象的引用,new Integer(),实际上是生成一个指针指向此对象;而int则是直接存储数据值

4、Integer的默认值是null,int的默认值是0

注意

Integer对象会占用更多的内存。Integer是一个对象,需要存储对象的元数据。但是int是一个原始类型的数据,所以占用的空间更少

关于Integer和int的比较

1. 两个new实例化出来的Integer变量比较,结果为false.

/**
 * @author tracydzf
 *比较两个new出来的Integer
 *
 */
public class Test {

  public static void main(String[] args) {
    Integer a = new Integer(100);
    Integer b = new Integer(100);
    System.out.println(a==b);
    //输出false
  }
}

当new一个Integer时,实际上是生成一个指针,指向此对象,两次new Integer生成的是两个对象,对象储存在堆当中,其内存地址不同,所以两个new出来的Integer变量不等。

2.int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较

/**
 * @author tracydzf
 *int 和 Integer的比较
 *
 */

public class Test {

  public static void main(String[] args) {
    Integer a = new Integer(100);
    int b = 100;
    System.out.print(a == b); //true
  }
}

3.非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)

/**
 * @author tracydzf
 * Integer 和 new Integer的比较
 *
 */
public class Test {

  public static void main(String[] args) {
    Integer a = new Integer(100);
    Integer b = 100;
    System.out.print(a == b); //false
  }
}

4.对于两个非new生成的Integer对象,进行比较时.

注意:

① java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100),java API中对Integer类型的valueOf的定义如下:

public static Integer valueOf(int i){
  assert IntegerCache.high >= 127;
  if (i >= IntegerCache.low && i <= IntegerCache.high){
    return IntegerCache.cache[i + (-IntegerCache.low)];
  }
  return new Integer(i);
}

② 当自动装箱后生成的Integer的对象,其值 -128<= x <= 127 时,这个对象会直接取缓存IntegerCache中的对应的对象,生成的当然也是个对象。

我们来看看例子

这里a跟b都是128,不会再IntegerCache取缓存对象,所以是false.

/**
 * @author tracydzf
 * Integer 和 Integer的比较
 *
 */
public class Test {

  public static void main(String[] args) {
    Integer a = 128;
    Integer b = 128;
    System.out.print(a == b); //false
  }
}

a,b都是127,数值相等,且满足在IntegerCache取缓存的条件,所以对象相等.

/**
 * @author tracydzf
 * Integer 和 Integer的比较
 *
 */
public class Test {

  public static void main(String[] args) {
    Integer a = 127;
    Integer b = 127;
    System.out.print(a == b); //true
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java基础之Integer使用的注意事项及面试题

    JAVA中Integer对象的引用 JAVA中没有指针一说,但也有引用的概念.这里要说的主要是Integer是不是同一个对象. 1.先看一段代码: public static void main(String[] args){ Integer a1 = 100; Integer b1 = a1;//另一种也可以b1=100 Field field = null; try { field = a1.getClass().getDeclaredField("value"); } catch

  • Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字

  • Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

    我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可以了,如下: 1.常规代码 <update id="update" parameterType="com.cq2022.zago.order.entity.Test" > update t_test_l <set > <if test="trnsctWayId != null"

  • Java中BigDecimal类与int、Integer使用总结

    前言 我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题.如下一段代码: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4.015 * 100); System.out.println(123.3 / 100); 输出: 0.060000000000000005 0.5800000000000001 401.49999999999994 1.23299999999999

  • 关于Java中你所不知道的Integer详解

    前言 本文主要给大家介绍了关于Java中Integer的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实参形参 前些天看到朋友圈分享了一片文章<Java函数的传参机制--你真的了解吗?> 有些触发,之前也研究过Java的Integer,所以写下本文,希望对你有所帮助. 交换 首先来看一个示例. 请用Java完成swap函数,交换两个整数类型的值. public static void test() throws Exception { Integer a = 1,

  • Java大数字运算之BigInteger 原创

    在 Java 中,有许多数字处理的类,比如 Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型的数字范围较 Integer 类型的数字范围要大得多.我们都知道 Integer 是 Int 的包装类,int 的最大值为 231-1,如果要计算更大的数字,使用Integer 数据类型就无法实现了,所以 Java 中提供了BigInteger 类来处理更大的数字. BigInteger 支持任

  • Java AtomicInteger类的使用方法详解

    首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private static Integer count = 0; synchronized public static void increment() { count++; } } 以下是AtomicInteger的: public class Sample2 { private static AtomicInteger count = new AtomicIn

  • 简单了解java中int和Integer的区别

    这篇文章主要介绍了简单了解java中int和Integer的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化(new 一下是最常见的实例化)后才能使用,而int变量不需要 3.Integer实际是对象的引用,new Integer(),实际上是生成一个指针指向此对象:而int则是直接存储数据值 4.Integer的默认值是null,in

  • Java中int与integer的区别(基本数据类型与引用数据类型)

    一.先说说int与integer的区别 int 是基本数据类型,默认值为0,不需要进行实例化 integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化. 基本数据类型是可以用"=="进行比较,而引用数据类型则不可以,一般是通过equals方法来实现比较. 二 .再说说基本数据类型与引用数据类型的区别? 特点: 1.从概念方面来说 基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值 2.从内存构建方

  • 详解Java中int和Integer的区别

    基本数据类型和引用类型 Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下: 原始类型:boolean,char,byte,short,int,long,float,double 包装类型:Boolean,Character,Byte

  • Java中int和Integer的区别

    目录 1.基本数据类型 2.包装类及其作用 2.1包装类的作用 3.int 和 Integer 的区别 4.总结 重要说明:本篇为博主<面试题精选-基础篇>系列中的一篇,查看系列面试文章请关注我. Gitee 开源地址:gitee.com/mydb/interv- nJava 是一种强数据类型的语言,因此所有的属性必须有一个数据类型.就像麦德龙超市一样,想要进去购物,先要有一个会员卡才行(刷卡入内).​ PS:Java 10 有了局部变量类型推导,可以使用 var 来替代某个具体的数据类型,但

  • 详谈java中int和Integer的区别及自动装箱和自动拆箱

    目录 int和Integer的区别及自动装箱和自动拆箱 Integer和int的对比,如下图所示: 自动装箱和自动拆箱: Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题) 1.先看下面的例子: 2.以下是Integer.valueof()的源代码: int和Integer的区别及自动装箱和自动拆箱 1.Integer是int的包装类,int则是java的一种基本数据类型. 2.Integer变量必须实例化后才能使用,int则不需要. 3.Integer实际是对象的引用,当n

  • 浅谈Java中Int、Integer、Integer.valueOf()、new Integer()之间的区别

    目录 Int Integer和Integer.valueOf() new Integer() 三者之间的比较 Int Int是Java八种基本数据类型之一,一般大小为4字节32位,取值范围为2-31-231.两个Int类型变量用"=="比较的是值的大小. package com.company.algorithm; public class Main { public static void main(String[] args) { int a = 100; int b = 100;

  • 简单讲解java中throws与throw的区别

    Java中throws和throw的区别讲解 当然,你需要明白异常在Java中式以一个对象来看待. 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 直接进入正题哈: 1.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常. 1.1   throw是语句抛出一个异常. 语法:throw (异常对象);         

  • 简单谈谈java中final,finally,finalize的区别

    (1) final:修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 (2) finally:在异常处理时提供 finally 块来执行任何清除操作.如果抛出一个异常,那么相匹配的 catc

  • Java中关于int和Integer的区别详解

    1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者,integer 是后者(也就是一个类). 2.初始化时 复制代码 代码如下: int i = 1; Integer i = new Integer(1);   // (要把integer 当做一个类看) int 是基本数据类型(面向过程留下的痕迹,不过是对Java的有益补充) Integer 是一个类,是int的扩展,定义了很多的转换方法 类似的还有:float Float.double Double.string Stri

  • 简单介绍java中equals以及==的用法

    简单介绍 equals方法是java.lang.Object类的方法有两种用法说明: 一.对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. 1."=="比较两个变量本身的值,即两个对象在内存中的首地址.(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属

随机推荐