春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了.docx

春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

字节与位的关系

在计算机的物理存储中,一条电路线被称之为1位,二进制识别中为0(低电平)或1(高电平),英文中用bit表示,而8个bit组成一个字节,英文为Byte

布尔类型的说明

对于boolean,官方文档未明确定义,它依赖于JVM厂商的具体实现。逻辑上理解是占用1位,但是实际中会考虑计算机高效存储因素。

基本数据类型之间的转换规则

基本数据类型之间也存在着转换关系,往往发生在表达式计算的过程中,而这种转换根据不同场景分为:自动类型转换强制类型转换

自动类型转换:Java编译器无需显示处理,一般由等级低的数据类型向等级高的数据类型转换,如int-long。很明显,int所能存储的数据必定是long的子集,不存在数据丢失问题。

等级由低到高

byte-short-int-long-float-double

char-int-long-float-double

inta=3;

doubleb=1.5;

//自动类型转换:a被转换为double类型

doubleresult=a*b;

System.out.println(结果:+result);//输出:结果:4.5

强制类型转换:由高等级数据转为低等级数据时往往存在强制类型转换,这时候Java编译器认为存在隐患,需要程序员介入,显示的处理强转,潜在风险是数据丢失或精度丢失。

由左到右需要强转

double-float-long-int-char-short-byte

doublec=10.1;

//强制类型转换:将double类型转换为int类型,精度丢失

intd=(int)c;

System.out.println(整数值:+d);//输出:整数值:10

转换规则如下

=右边先自动转换成表达式中最高级的数据类型,再进行运算。整型经过运算会自动转化最低int级别,如两个char类型的相加,得到的是一个int类型的数值。

=左边数据类型级别大于右边数据类型级别,右边会自动升级

=左边数据类型级别小于右边数据类型级别,需要强制转换右边数据类型

char与short,char与byte之间需要强转,因为char是无符号类型

这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean。

因为Java中一切皆对象,基本数据类型无法满足这个大口号,比如泛型、序列化、类型转换、高频数据区间的缓存等,故为了弥补,便诞生了8种基本数据类型对应的包装类型。

包装类型与基本数据类型差异

使用场景:在Java中除了一些常量和局部变量的定义会用到基础数据类型外,绝大部分情况下均采用包装类型,如方法参数,对象属性等,且基本数据类型不能用于泛型,包装类型可以!

默认值:包装类型比基本类型多了一个非功能值:null,在不做任何赋值的情况下,包装类型的默认就是null,而基本数据类型都有相应的默认值,见上面表格。

所占内存因为包装类型是对象,会有一些对象头等信息,所以占用空间上要大于基本数据类型。

比较方式基本类型采用==号比较,比较的是值,而对于包装类型来说,==比较的其实是对象的内存地址,对象值的比较需要通过equals()方法完成。

[注意]:很多同学都以为基本数据类型存在栈中,包装类型作为对象存储在堆中,这个观点是有失偏颇的,如果基础数据类型的成员变量在没有被static关键字修饰的情况下,是存在的堆中的,只有局部变量被存在栈的局部变量表中!而全部对象都存在堆中,也是个不完整的答案,这里涉及到HotSpot中的逃逸分析,等讲到JVM时再展开说吧。

自动装箱与拆箱

在Java中不仅仅基本类型之间存在着转换,基本数据类型与包装类型之间同样存在着转换,在JDK1.5之前是不支持自动装箱与拆箱的,所以那时候需要通过显示的方法调用来实现转换,而JDK1.5开始,自动化程度提升了。

装箱:基本类型转变为包装器类型的过程。

拆箱:包装器类型转变为基本类型的过程。

//JDK1.5之前是不支持自动装箱和自动拆箱的,定义Integer对象,必须

Integeri=newInteger(8);

//JDK1.5开始,提供了自动装箱的功能,定义Integer对象可以这样

Integeri=8;

intn=i;

文档评论(0)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档