Java基本数据类型及包装类的介绍-创新互联

本篇内容主要讲解“Java基本数据类型及包装类的介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java基本数据类型及包装类的介绍”吧!

创新互联专注于企业成都营销网站建设、网站重做改版、莲湖网站定制设计、自适应品牌网站建设、H5高端网站建设商城建设、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为莲湖等各大城市提供网站开发制作服务。

关键字
位数、常量池、包装类(自动装拆箱)

8种基本数据类型
整数类型:byte,short,int,long
浮点数类型:float,double
字符类型:char
布尔类型:boolean

位数
1、JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1个字节。
2、byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256。

包装类
能解决
1、基本类型并不具备对象的特性: 没有成员变量,方法可以调用。
2、不支持面向对象的变成机制(不可变),包装类。Byte,Short,Integer,Long,Double,Float,Charater,Boolean。

JDK1.5,开始提供自动装箱和拆箱功能,基本类型变量赋给对应的包装类变量称之为装箱。自动拆箱与之相反。
Java 7增强了包装类的功能,为所有的包装类提供了一个静态的compare(xxx val1,xxx val2)方法,来比较两个基本类型值得大小。(解决 两个128自动装箱后,比较它们的大小并不相等问题)
Java 8再次增强包装类的功能,可以支持无符号运算。

基本类型和包装类区别
1、声明方式不同:包装类型需要使用new关键字来在堆中分配存储空间,基本类型不需要。
2、存储方式及位置不同:基本类型存储在栈中,而包装类型是在堆中,然后通过引用来使用。
3、初始值不同:包装类型的初始值为null,基本类型的初始值 eg:int -> 0,boolean ->false。
4、使用场景不同:常用的集合如Collection、Map时必须使用包装类(不可变性)。

常量池
好处:
1、节省内存空间
2、提高运行效率
包装类
Byte,Short,Integer,Long,Character,Boolean 5种 ,在 -128 ~ 127中用到常量池,会自动拆箱装箱,其余数字范围则会新建实例
两种浮点数类型的包装类Float,Double并没有实现常量池技术

基础类型
被final修饰时:
  如果是成员变量,一定会存入常量池,比如变量b;
  如果是局部变量,既不会存入常量池,也不在栈中;

没有被final修饰时:
  不管是成员变量还是局部变量,都不一定会被存入常量池,int类型的变量会以2的15次方为基准,大于等于这个数就会存入常量池,小于则不会;
  但是double类型1d不会,2d会,这个原因也没找到是为什么;

包装类常见问题
一.数值包装类
/ Integer案例/
Integer i1 = 128;
Integer i2 = 128;
Integer i3 = 127;
Integer i4 = 127;
System.out.println(i1 == i2);//false
System.out.println(i3==i4); //true
  
/ Long案例/
Long l1 = 128L;
Long l2 = 128L;
Long l3 = -128L;
Long l4 = -128L;
System.out.println(l1 == l2);//false
System.out.println(l3==l4);//true
   
/Float(Double)案例(形成对比)/
Float f1 = 128f;
Float f2 = 128f;
Float f3 = 127f;
Float f4 = 127f;
System.out.println(f1 == f2);//false
System.out.println(f3==f4);//false

二.原理
因为Byte,Integer,Long对在-128~127之间的数据进行了缓存,如果待转换的数值 i 在该范围了则直接从缓存取,而不是new Integer(i)。
   Float和Double则是每次都new一个新的,没有缓存机制,所以都为false。

三.JDK源码:
/Integer的实现/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];//IntegerCache.high为127,取缓存
else
return new Integer(i);
}
/Long的实现/
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
/Float的实现(无缓存)/
public static Float valueOf(float f) {
return new Float(f);
}

到此,相信大家对“Java基本数据类型及包装类的介绍”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:Java基本数据类型及包装类的介绍-创新互联
转载源于:http://ybzwz.com/article/ccdioe.html