深入理解JAVA——(3)
Integer类是基本数据类型int的包装类。
为什么要用包装类?
因为java的8大基本数据类型没有方法,所以要用对应的包装类丰富可使用的方法。
顺便回忆一下java的8大基本数据类型:
整型:byte, short, int, long
字符型:char
浮点型:float, double
布尔型:boolean
首先介绍构造方法:
使用方法:
Integer a = new Integer(10);
Integer b = new Integer("10");
官方文档已经标记处这两个构造方法都不建议用。
实际使用中通过静态方法parseInt(String s)或者valueOf(int i)来创建对象,代码如下:
Integer c = Integer.parseInt("1000");
Integer d = Integer.valueOf("127");
会返回Integer对象
解释一下:
new Integer():方法会在内存中新开辟一个内存空间,创建一个新对象;
parseInt():方法会使用静态类IntegerCache中的cache里的对象。
valueOf():如果不需要新的Integer实例,则通常应优先使用此方法
System.out.println(new Integer("10")==new Integer("10"));
// 打印:false
System.out.println(Integer.parseInt("100")==Integer.parseInt("100"));
// 打印:true
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
//打印:true
//但是:
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
//打印:false
附上官方文档:
总结:创建Integer对象用parseInt()方法或者valueOf()
还有Integer的valueOf(String s)方法
此方法返回一个等于值的Integer对象:
底层是:
new Integer(Integer.parseInt(s))
为什么 System.out.println(Integer.valueOf(“128”)==Integer.valueOf(“128”));打印:false
因为:
valueOf()方法默认在-128~127之间时返回缓存中的已有对象
最后给大家出几道题,看看是否和你想的一样
1.System.out.println(127==127); //true , int type compare
2.System.out.println(128==128); //true , int type compare
3.System.out.println(new Integer(127) == new Integer(127)); //false, object compare
4.System.out.println(Integer.parseInt("128")==Integer.parseInt("128")); //true, int type compare
5.System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); //true ,object compare, because IntegerCache return a same object
6.System.out.println(Integer.valueOf("128")==Integer.valueOf("128")); //false ,object compare, because number beyond the IntegerCache
7.System.out.println(Integer.parseInt("128")==Integer.valueOf("128")); //true , int type compare
如有不解或者内容指正,欢迎评论区留言!