浅谈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;
        System.out.println(a == b);//true
    }
}

Integer和Integer.valueOf()

将Int值赋给Integer变量,系统会自动将这个Int值封装成一个Integer对象。
比如:Integer a = 100;实际上的操作是:Integer a = Integer.valueOf(100);
以下是valueOf()的源码

注意:这里Integer.valueOf(),当Int值的范围在-128-127之间时,会通过一个IntegerCache缓存来创建Integer对象;当Int值不在该范围时,直接调用new Integer()来创建对象,因此会出现以下的情况
(1)Integer a = 100; Integer b = 100; a==b结果为true,因为这两个Integer变量引用的是缓存中的同一个Integer对象 ;
(2)Integer c = 200; Integer d = 200; a==b结果为false,因为a和b是通过new Integer() 创建的两个不同对象。

package com.company.algorithm;

public class Main {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = 200;
        Integer d = 200;
        System.out.println(a == b);//true
        System.out.println(c == d);//false
    }
}

new Integer()

new Integer()每次都会创建新的对象,==比较的是两个对象的内存地址

package com.company.algorithm;

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

三者之间的比较

(1)不管是new创建的Integer对象,还是通过直接赋值Int值创建的Integer对象,它们与Int类型变量通过“==”进行比较时都会自动拆箱变成Int类型,所以Integer对象和Int变量比较的是内容大小。

package com.company.algorithm;

public class Main {
    public static void main(String[] args) {
        int a = 100;
        Integer b = 100;//等价于b=Integer.valueOf(100);
        Integer c = new Integer(100);
        System.out.println(a == b);//true
        System.out.println(a == c);//true
    }
}

(2)new创建的Integer对象和直接赋Int值创建的Integer对象使用==比较的是它们的内存地址。

package com.company.algorithm;

public class Main {
    public static void main(String[] args) {
        Integer b = 100;//等价于b=Integer.valueOf(100);
        Integer c = new Integer(100);
        System.out.println(b == c);//false
    }
}

(3)赋Int值创建的Integer对象比较:
当Int值在-128-127之间时,两个Integer变量引用的是IntegerCache中的同一个对象,内存地址相同,因此==的结果为true;
当Int值不在以上范围时,两个Integer对象都是通过new创建的,内存地址不同,因此==的结果为false

package com.company.algorithm;

public class Main {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = 200;
        Integer d = 200;
        Integer f = new Integer(100);
        System.out.println(a == b);//true
        System.out.println(c == d);//false
        System.out.println(a == f);//false
    }
}

一个金典面试题

package com.company.algorithm;

public class Main {
    public static void main(String[] args) {
        Integer a = 49;
        int b = 49;
        Integer c = Integer.valueOf(49);
        Integer d = new Integer(49);
        System.out.println(a == b);//true
        System.out.println(a == c);//true
        System.out.println(b == c);//true
        System.out.println(c == d);//false
    }
}

到此这篇关于浅谈Java中Int、Integer、Integer.valueOf()、new Integer()之间的区别的文章就介绍到这了,更多相关Java Int Integer Integer.valueOf() newInteger内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java Integer.ValueOf()的一些了解

    本文是对 Integer.ValueOf()的一些了解,分享给大家 这道题有的人或许做过,也可能选对,但是这其中的道理你却不一定理解,在这里大牛走过,小白留下一起学习. 先来分析选型A,Integer i01 = 59,是一个装箱的过程,在进行i01 == i02的比较过程中,因为右边是整型,发生了拆箱的动作,所以进行了值得比较,所以返回true. 在这里拿出Integer a = 59,Integer b = 59,这种又会出现什么状况呢,如果按照装箱和拆箱来看就是true,如果按照对象来看,

  • Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    先来看段代码 public class IntegerDemo { public static void main(String[] args) { String num = null; System.out.println( Integer.parseInt(num));// Exception java.lang.NumberFormatException System.out.println( Integer.valueOf(num));// Exception java.lang.Num

  • Java Integer.valueOf()和Integer.parseInt()的区别说明

    前言 大家都知道Integer类中有Integer.valueOf(String s)和Integer.parseInt(String s)两个静态方法,他们都能够将字符串转换为整型.说到这里你肯定会想同一个功能为什么要提供两个不同的方法,这不是浪费吗? 区别 Integer.parseInt(String s)将会返回int常量. Integer.valueOf(String s)将会返回Integer类型,如果存在缓存将会返回缓存中已有的对象. 使用不当将会产生的问题 由于Java的自动拆箱

  • 浅谈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中字符串数组、字符串、整形之间的转换

    字符串数组转字符串(只能通过for循环): String[] str = {"abc", "bcd", "def"}; StringBuffer sB = new StringBuffer(); for (int i = 0; i < str.length;i++) { sB.append(str[i]); } String s = sB.toString(); 字符数组转字符串可以通过下面的方式: char[] data = {"

  • 浅谈java中集合的由来,以及集合和数组的区别详解

    对象多了用集合存,数据多了用数组存. 数组是固定长度的,集合是可变长度的. 集合是:只要是对象就可以存,不管是不是同一种对象 而数组只能存储一种类型的对象 下面是集合的框架: 以上就是小编为大家带来的浅谈java中集合的由来,以及集合和数组的区别详解的全部内容了,希望对大家有所帮助,多多支持我们~

  • 浅谈java中BigDecimal类的简单用法

    一.BigDecimal概述 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理.一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度.所以开发中,如果我们需要精确计算的结果,则必须使用

  • 浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String s=null; 但是不能把null赋值给基本类型,如int ,float,double等 int k=null ----------编译器会报错cannot convert from null to int 2.null是关键字,像public.static.final.它是大小写敏感的,你不能将

  • 浅谈java中的TreeMap 排序与TreeSet 排序

    TreeMap: package com; import java.util.Comparator; import java.util.TreeMap; public class Test5 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TreeMap<String, String> tree = new TreeMap<String,

  • 浅谈Java中常用数据结构的实现类 Collection和Map

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类. Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个C

  • 浅谈java 数据处理(int[][]存储与读取)

    MyFile .java: import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class MyFile { public static void SaveFile(String filename,int[][] arr){ try { File file = new File(filename); //存放数组数据的文件

  • 浅谈Java中几个常用集合添加元素的效率

    初始化需要进行比较的集合,统一增加10万个元素,获取整个过程的执行时间. 1.List集合增加元素 private static void testList() { List<Integer> list = new ArrayList<Integer>(); long startTime = System.currentTimeMillis(); // 获取开始时间 for (int i = 0; i < 100000; i++) { list.add(i); } long

  • 浅谈java中==以及equals方法的用法

    equals 方法是 java.lang.Object 类的方法. 有两种用法说明: (1)对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. "=="比较两个变量本身的值,即两个对象在内存中的首地址. "equals()"比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 =

随机推荐