JAVA数据类型

基本数据类型包装类
byte(字节)java.lang.Byte
char(字符)java.lang.Character
short(短整型)java.lang.Short
int(整型)java.lang.Integer
long(长整型)java.lang.Long
float(浮点型)java.lang.Float
double(双精度)java.lang.Double
boolean(布尔型)java.lang.Boolean
基本上就是一句话,除了8本基本的数据类型,其他的都是引用数据类型,如Long,Integer等,其主要目的就是提供一个对象实例作为壳,将其基本类型包到这个对象之中,然后提供很多操作数据的方法,使面向对象的编程变得更加容易。

Integer 

	public static void main(String[] args) {

		int a = 2;
		int b = 2;
		Integer c = 3;
		Integer d = 3;
		Integer e = 128;
		Integer f = 128;
		System.out.println(a == b);
		System.out.println(c == d);
		System.out.println(e == f);

	}
输出结果是:true,true,false
  1. 整型值的比较很容易理解,就是值的大小比较  
  2.   
  3. 但是为什么下面的语句会是不同的结果:  
  4.   
  5.         System.out.println(c == d);  
  6.         System.out.println(e == f);  
  7.   
  8. 从字节码上看都是一样的指令,没有不同的地方  
  9. 原因就在Integer的方法 valueOf  
  10.   
  11. 我们来看这个方法的源码:字节码里调用的就是这个方法:   
  12.   
  13.  public static Integer valueOf(int i) {  
  14.         if(i >= -128 && i <= IntegerCache.high)  
  15.             return IntegerCache.cache[i + 128];  
  16.         else  
  17.             return new Integer(i);  
  18.     }  
  19.   
  20. private static class IntegerCache {  
  21.         static final int high;  
  22.         static final Integer cache[];  
  23.   
  24.         static {  
  25.             final int low = -128;  
  26.   
  27.             // high value may be configured by property  
  28.             int h = 127;  
  29.             if (integerCacheHighPropValue != null) {  
  30.                 // Use Long.decode here to avoid invoking methods that  
  31.                 // require Integer's autoboxing cache to be initialized  
  32.                 int i = Long.decode(integerCacheHighPropValue).intValue();  
  33.                 i = Math.max(i, 127);  
  34.                 // Maximum array size is Integer.MAX_VALUE  
  35.                 h = Math.min(i, Integer.MAX_VALUE - -low);  
  36.             }  
  37.             high = h;  
  38.   
  39.             cache = new Integer[(high - low) + 1];  
  40.             int j = low;  
  41.             for(int k = 0; k < cache.length; k++)  
  42.                 cache[k] = new Integer(j++);  
  43.         }  
  44.   
  45.         private IntegerCache() {}  
  46.     }  
  47.   
  48. Integer里弄了一个缓存,对于在 -128127 之间的数值,会直接使用该缓存里的对象  
  49.  也就是说 Integer c = 3 或者 Integer c = Integer.valueOf(3) ,最终 c 得到的是Integer里的缓存对象  
  50.  同理,d也是获得该相同对象因此 进行 c == d 比较时,c和d引用的是同一个对象,因此就true  
  51.  而对于128,已经超出缓存范围了,因此 valueOf 方法会生成一个新的Integer对象因此e和f就引用不同 的对象了,进行==比较,当然就false了  
  52.  另外,对Integer的缓存,我们在日常开发时,对于小的整型值应该充分利用Integer的缓存对象省去过多的对象创建,回收的操作,这样会极大的提高程序性能 

int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充),Integer 是一个类,是int的扩展,定义了很多的转换方法

  类似的还有:float Float;double Double;string String等,而且还提供了处理 int 类型时非常有用的其他一些常量和方法

  举个例子:当需要往ArrayList,HashMap中放东西时,像int,double这种内建类型是放不进去的,因为容器都是装 object的,这是就需要这些内建类型的外覆类了。

举例说明

  ArrayList al=new ArrayList();

  int n=40;

  Integer nI=new Integer(n);

  al.add(n);//不可以

  al.add(nI);//可以

  并且泛型定义时也不支持int: 如:List<Integer> list = new ArrayList<Integer>();可以  而List<int> list = new ArrayList<int>();则不行

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值