Integer
数据类型
1、内置数据类型(基本数据类型)
Java有如下的内置数据类型:
| 项 | 定义 | 位数 | 表示范围 |
|---|---|---|---|
| byte | byte 数据类型是8位、有符号的,以二进制补码表示的整数 | 8位 | -128至127 |
| short | short 数据类型是 16 位、有符号的以二进制补码表示的整数 | 16位 | -215至215-1 |
| int | int 数据类型是32位、有符号的以二进制补码表示的整数 | 32位 | -231至231-1 |
| long | long 数据类型是 64 位、有符号的以二进制补码表示的整数 | 64位 | -263至263-1 |
| float | float 数据类型是单精度、32位、符合IEEE 754标准的浮点数,表示形式为3.2f | 32位 | 1.4E-45至3.E38 |
| double | double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数; | 64位 | 4.9E-324至1.23157E308 |
| char | char 类型是一个单一的 16 位 Unicode 字符; | 16位 | 0至65535 |
2、引用数据类型
引用数据类型分为数组、类、接口。
3、封装类类型
Java为每个基本数据类型提供了封装类,对应关系如下:
基本数据类型: boolean,char,byte,short,int,long,float,double 封装类类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
讯享网
4、int与Integer的基本使用对比
Integer是int的包装类;int是基本数据类型;
Integer变量必须实例化后才能使用;int变量不需要;
Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
Integer的默认值是null;int的默认值是0。
5、int与Integer的详细对比
(1)因为Integer变量是对Integer对象的引用,所以通过new关键字生成的Integer变量是不相等的,如下:
讯享网package com.java.basic; public class UseInteger {
public static void main(String[] args) {
Integer i = new Integer(100); //i内存地址为 System.out.println(System.identityHashCode(i)); Integer j = new Integer(100); //j的内存地址为 System.out.println(System.identityHashCode(j)); System.out.print(i == j); //false } }
(2)Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true,因为Integer会自动拆包为int,就相当于两个int相比较。
package com.java.basic; public class UseInteger {
public static void main(String[] args) {
Integer i = new Integer(100); int j = 100; System.out.print(i == j); //true } }
(3)非new生成的Integer变量且数据范围在-128-127之间,与new Integer()生成的对象比较时,如下:
讯享网package com.java.basic; public class UseInteger {
public static void main(String[] args) {
Integer i = new Integer(100); //i内存地址为 System.out.println(System.identityHashCode(i)); int a = 100; //a内存地址为 System.out.println(System.identityHashCode(a)); Integer j = 100; //j的内存地址为 System.out.println(System.identityHashCode(j)); System.out.print(i == j); //false } }
因为在数据范围在-128-127之间时,非new生成的Integer生成的对象会指向常量池中的数据,所以与new Integer生成的对象内存地址不同,两者不相等。
(4)非new生成的Integer变量且数据范围为-128-127之外,与非new生成的Integer变量比较时,如下:
package com.java.basic; public class UseInteger {
public static void main(String[] args) {
int a = 129; //a内存地址为 System.out.println(System.identityHashCode(a)); Integer i = 129; //i内存地址为 System.out.println(System.identityHashCode(i)); Integer j = 129; //j的内存地址为 System.out.println(System.identityHashCode(j)); System.out.print(i == j); //false } }
因为在-128-127范围之外的数据,不会被自动加入到常量池中,所以非new生成的Integer变量相当于new Integer(),内存地址不同故不相等。
7、参考链接
JAVA常量池,一篇文章就足够入门了。(https://blog.csdn.net/_/article/details/)
Java基础之int和Integer有什么区别https://blog.csdn.net/chenliguan/article/details/)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35007.html