Java 总结第一弹

Java 基础 (一)

1.数据类型

数据类型分为两类:

  • 基本数据类型(boolean, byte, short, int, long, float, double, char )
  • 引用数据类型(数组, 类, 接口)——>后面详细介绍
1.1 基本数据类型

基本数据类型:boolean, byte, short, int, long, float, double, char 八类

		基本数据类型				包装类				默认值				大小				  范围			
		boolean					Boolean		  	  	false				 /			  			/			
		byte					Byte		  		  0					 1B		  			-2^7~2^7-1
		short					Short		  		  0					 2B		  			-2^15~2^15-1
		int						Integer		  		  0					 4B		  			-2^31~2^31-1	
		long					Long		  		  0l				 8B		  			-2^63~2^63-1
		float					Float		  		  0.0f				 4B		  			-2^31~2^31-1
		double					Double		  		  0.00				 8B		  			-2^63~2^63-1
		char					Character	  	    '\u0000'			 2B		  			  0~2^31-1
// 虽然字符 char 只有一个字符,但却占两个字节是因为 Java 使用的是 Unicode 字符集而不是 ASCII 字符集
1.2 与其包装类区别

了解区别之前,先来了解一下Java中的内存分配,以及Java方法区

1.3 自动拆装箱
/*
	自动装箱
	自动调用valueOf()方法,将其装箱-->转化为Integer实例对象
*/
Integer i = 10;

Integer j = new Integer(10);
/*
	自动拆箱
	自动调用intValue()方法,将其拆箱-->转化为基本数据类型
*/
int k = j;

valueOf()方法源码

// IntegerCache.low 其值为-128,相对应的 IntegerCache.high 其值为127
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

注意: 所有的包装类对象之间值的比较,全部使用equals方法,对于Integer var = ? 在-128到127之间的赋值,Integer对象是在IntegerCache.cahche产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,推荐使用equals方法进行判断
IntegerCache是一个私有的内部类,源码如下:

private static class IntegerCache {
     static final int low = -128;
     static final int high;
     static final Integer cache[];

     static {
         // high value may be configured by property
         int h = 127;
         String integerCacheHighPropValue =
             sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
         if (integerCacheHighPropValue != null) {
             try {
                 int i = parseInt(integerCacheHighPropValue);
                 i = Math.max(i, 127);
                 // Maximum array size is Integer.MAX_VALUE
                 h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
             } catch( NumberFormatException nfe) {
                 // If the property cannot be parsed into an int, ignore it.
             }
         }
         high = h;

         cache = new Integer[(high - low) + 1];
         int j = low;
         for(int k = 0; k < cache.length; k++)
             cache[k] = new Integer(j++);

         // range [-128, 127] must be interned (JLS7 5.1.7)
         assert IntegerCache.high >= 127;
     }

     private IntegerCache() {}
 }
/**
*	注意:
*	该缓存池实体类的上界是可以调整大小的,在启动JVM时,通过
*		-XX:AutoBoxCacheMax=<size>
*	来调整缓存池实体类的上界大小,该选项在JVM初始化时会设定一个名为
*		java.lang.IntegerCache.high	
*	系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界
*/
  • 当new的数值大于-128小于127时,返回的实际上是缓存的值,实际上是同一个对象,而不在这一个范围内的,返回的是构造方法新建的 Integer对象

  • 基本数据类型作为成员变量与静态变量时,其拥有默认值;作为局部变量则没有默认值

    成员变量、局部变量与静态变量的区别

有任何错误请指正,谢谢您的阅读,希望对您有所帮助。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值