Integer和int详解
在此之前,我们先了解一下Java的包装类和自动拆箱/装箱
什么是包装类
虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。这种借助于非面向对象技术的做法有时也会带来不便。比如:
- 编码过程中只接收对象的情况,比如List中只能存入对象,不能存入基本数据类型;比如一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类; 比如泛型等等。
- 基本数据类型没有toString()方法等
Java中对每种基本类型都有一个对应的包装类:
- byte -> Byte
- short -> Short
- int -> Integer
- long -> Long
- float -> Float
- double -> Double
- boolean -> Boolean
- char -> Character
其中需要注意int对应的是Integer,char对应的Character,其他6个都是基本类型首字母大写即可。
每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变(类似于String类,可看源码)。
基本数据类型和包装类的区别
拆箱/装箱
基本数据类型和对应包装类转换称为装箱:
Integer i = Integer.valueOf(1); //手动装箱 Integer j = 1; //自动装箱 |
Integer i0 = new Integer(1); int i1 = i0; //自动拆箱 int i2 = i0.intValue(); //手动拆箱 |
jdk5.0开始增加自动装箱/拆箱
- int和Integer的区别
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0
- 关于Integer和int的比较
1、由于Integer变量实际上是对一个Integer对象的引用,所以通过两个通过new生成的Integer对象永远不相等(因为new生成的是两个对象,其内存地址不同)。
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
2、Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变成了两个int变量的比较)
Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true
3、非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是Java常量池中的对象)
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
4、对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较的结果为false
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
Java在编译Integer i=100; 时,会翻译成为Integer i = Integer.valueOf(100); 而java api中对Integer类型的valueOf的定义如下
Integer包装类 默认创建了数值[-128,127] 的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } |
Integer j = 300; 自动包装时的class字节码:
发现什么了? 自动包装时实际上还是调用的valueOf方法。而上面我们讲过的,valueOf方法用到了缓存池
Integer和int详解相关推荐
- java integer == int_Java中int和Integer的区别详解
1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者>>integer 是后者(也就是一个类) 2.初始化时>> int i =1; Integer i= n ...
- java int 详解,int与Integer详解(java基础篇)
前言 在回顾==与equals的区别于联系时,我们很清楚的了解到: ==:可以用于基本数据类型的比较,也可以用于对象进行比.,对于基本数据类型,比较的是值:对于引用数据类型,比较的是内存地址 equa ...
- Integer源码详解
尊重原创,转载请标明出处 http://blog.csdn.net/abcdef314159 对于Integer这个类估计大家也都非常熟悉了,以前看过他的源码,但也只是粗略的看了一下,最近有时间 ...
- Integer缓存IntegerCache详解
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 引子 今天,我们从一段非常简单的代码说起. 示例代码 package cn.com; /** ...
- pythonbyte转int_Python将byte数组转换为int详解
代码 import struct import ctypes def test_struct(buf, offset): return struct.unpack_from("I" ...
- Integer类超详解
目录(点击传送
- java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)
Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...
- java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)
int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...
- python int函数详解_Python内置函数OCT详解
英文文档:oct ( x ) Convert an integer number to an octal string. The result is a valid Python expression ...
最新文章
- 国内首个零信任技术标准发布 腾讯安全牵头编制
- Windows 10下安装Anaconda(Anaconda3-5.1.0)
- idea怎么调成黑色页面
- 页面刷新 vuex 数据重新被初始化
- python的cubes怎么使用_如何使用python中的opengl?
- 动态规划——编辑距离
- 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍
- .c和.h文件的区别(转载)
- vi删除选中内容_如何优雅的删除代码-VIM
- ubuntu 14.04中安装phpmyadmin即mysql图形管理界面
- 反射生成SQL语句入门
- Atitit 知识图谱 知识抽取 信息抽取的总结艾提拉总结 目录 1. 知识抽取	1 2. 数据源主要来自两种渠道(	2 2.1. 内部结构化数据vs 外部网页数据	2 3. 2. 知识图谱的数据来
- Ubuntu 字体安装以及 vscode字体配置
- Linux下如何使用搜狗词库
- 盘点2014年邮件行业大事件
- vuex存储什么数据_Redis除了存储数据以外还能做什么?
- BigWorld Pty. Ltd.是一家全球领先的大型多人在线游戏(MMOG)开发解决方案供应商...
- 安卓4.4pppoe拨号间隔及轮次修改
- 工图怎么进行三维标注
- 换地方上网后Kali Linux 网络设置