int integer 的区别
来源:互联网 发布:红痘印 知乎 编辑:程序博客网 时间:2024/06/03 16:41
今天来总结int integer 的区别 很基础的东西 不好的地方请大家指正。
说是总结 其实不如来说是当年面试埋下的坑 ,现在把这些坑深入的填一下 。
说起nt integer 的区别 很多人都会回答他们的定义 int是基本数据类型 integer 是包装类 int的初始值是0 integer 的初始值 是null 除了这些还有什么呢 很多人就不知道了
Integer是对象而int不是,内存的分配位置也不一样
Integer的属性和其他类一样的!在方法里都是引用传递,而原始类型是值传递!
int是为了兼容以前的编程语言使用的基本类型,目的是让程序效率更高,以为它是直接分配到栈上的。所以它不是对象,不能有类似 int.operation()的操作。
Integer是java中一切都是对象这个大前提下的int的包装类型,可以使用方法,是个对象,是用new分配到堆上的。
int是一种基本数据类型,而Integer是相应于int的类类型,称为对象包装。
实现这种对象包装的目的主要是因为类能够提供必要的方法,用于实现基本数据类型的数值与可打印字符串之间的转换,以及一些其他的实用程序方法;
另外,有些数据结构库类只能操作对象,而不支持基本数据类型的变量,包装类提供一种便利的方式,能够把基本数据类型转换成等价的对象,从而可以利用数据结构库类进行处理。
接下来我们我们看一下他们之间的比较
Integer a = 1000, b = 1000; System.out.println(a == b);// false Integer c = 127, d = 127; System.out.println(c == d);// true int i = 1; Integer integer = new Integer(1);// Integer 当作一个对象 Integer integer2 = 1;// 实际编译为 Integer.valueOf(1) System.out.println("i == integer:" + (i == integer));// true System.out.println("i == integer2:" + (i == integer2));// true System.out.println("integer == integer2:" + (integer2 == integer));// false
我们先来说一个有趣的问题 在前四行代码中 我们可以看到 同样是一个Integer 变量的比较 为什么第一个为false 第二个为true 在JVM编译的时候Integer a = 1000 他会编译为Integer.valueOf(10000) 我们看一下valueOf()的源码
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
看一下源码大家都会明白,对于-128到127之间的数,会进行缓存 所以 Integer c = 127,会缓存 Id = 127;会直接从缓存中取出来 所有他们的内存地址是一样的
接着
System.out.println(“i == integer:” + (i == integer));// true
System.out.println(“i == integer2:” + (i == integer2));// true
这俩比较时都为true 是因为在jdk 1.5以上时 int 和integer比较的时候会执行一个拆箱操作 所有比较时都为true
System.out.println(“integer == integer2:” + (integer2 == integer));// false
这俩在比较的时候Integer integer = new Integer(1) 为对象 其引用指向堆中 而Integer integer2 = 1; 会存放到栈的常量池 中 所有内存地址不相等
在说下int integer的使用场景
Integer 的默认值是null
int 的默认值 是 0
例如 一个人 的成绩,
如果用 int 来保存,没有赋值的 情况下 那 他的成绩 就是 0分
如果用 Integer 来保存, 没有赋值的情况 就是 null, 表示没有 没有 输入 成绩.
所以 在区分是否有初始值时 我们可以使用Integer 比如 id 没有获取到的时候为null 而不是0
- int integer 的区别
- int与integer的区别!
- int 和 Integer 的区别
- int 和 Integer 的区别
- int和Integer的区别
- int 与 Integer 的区别
- int与Integer的区别
- int和Integer的区别
- int与integer的区别
- int 和 integer的区别
- int与Integer的区别
- Integer与int的区别
- int与integer的区别!-
- int与Integer的区别
- Integer 与int 的区别
- Integer与int的区别
- int 与 integer的区别
- Integer和int的区别
- freetype2
- NYOJ-----5---Binary String Matching(KMP)
- 在 iOS 应用中直接跳转到 AppStore 的方法
- easyui中表格可编辑中 datebox和datetimebox的 设置
- 局域网的分类
- int integer 的区别
- java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
- Android Studio常用代码快捷方式
- MFC _GDI
- VM虚拟机下搭建Linux C++开发环境
- 224 mysql 设置远程连接权限
- 基于POI的两个JAVA操作Office工具类
- 如何防止sql注入
- Android实用技巧.视图技巧(二)