Java中的基本数据类型以及各个基本数据类型之间的转换的细节问题。

本文详细介绍了Java中的八种基本数据类型,包括它们的字节大小、取值范围以及转换规则。特别强调了不同类型间的转换,如从高字节到低字节的转换可能导致精度损失,而从低字节到高字节转换需要强转。同时,讨论了浮点类型转换的精度问题和字符类型的Unicode编码。最后提到了布尔类型的特性,并指出在Java中short和byte转换默认为int类型。
摘要由CSDN通过智能技术生成

         因为最近在听韩顺平老师的课,所以就进行了一个总结。

         首先要了解一门语言肯定要先了解这门语言的基本数据类型是什么,了解了数据类型之后,我们就可以设置不同类型的变量,来实现我们想要达到的各种目的以及继续后续的学习。

        java中的数据类型分为八种,每种数据类型所设置的变量在内存空间中占有不同的字节。通过下面这张图片可以分别看出所占的字节大小。而学过计算机组成原理这门课程后,我们会知道一个字节表示8bit。一个bit表示二进制中的一个数位。所以一个字节的最多存储长度就是256,共有2^8=256 种可能性。也就正对应着byte的存储范围:-128~127。而其他基本数据类型同理: 因为char 没有负值,但又占两个字节,所以取值范围是0~2^16-1(65535)。

        各个类型之间从可以进行转换,但从并不支持转换,需要一些方法。比如说要从int转为short类型,那么我们知道int设置的变量是四个字节,而short只有两个字节。他们之间的内存空间分配大小明显不同。所以我们无法自然的从低字节的分配空间转向高字节的分配空间,但是可以从高字节的分配空间转到低字节的分配空间,也就是舍弃一部分空间。这可能会造成内存溢出的问题!!!下面我将韩顺平老师讲课所用到的图片放在下面提供各位参考! 

     注意:char不能和byte或short进行相互转换!

        浮点类型:浮点数=符号位+指数位+尾数位,因为尾数位可能会丢失,造成精度损失,所以小数也可以叫做近似值!java中的浮点类型默认为Double类型。所以当我们写 float a = 1.1;时程序会说无法从Double转为float,会造成精度损失。而这时候的解决办法有两种,一种为强转换法,就是不考虑精度损失(但要小心内存溢出!),float a = (float)1.1;强行将1.1赋值给float类型的变量a。另一种就是使1.1默认为float类型,float a = 1.1f;(这里f写为F也可以),这种表示1.1是float类型。

       浮点数的使用陷阱:关于浮点类型还需要注意一点:通过给Double类型变量赋值和通过运算之后给Double类型变量赋值是两个不同的结果。比如下面的例子:

                

        不难看出,a和b输出的值并不相同。那么这是为什么呢?明明都应该是2.7才对。其实是计算机并不知道这个数值运算什么时候会结束,他不能像人的数学运算一样,算过之后已经知道小数点后边全是0.但是计算机认为后边可能还会有数值,类似于你运算结果8.000000000001。计算机认为有可能0的后方还有数值。所以就取了近似值,所以小数都可以认为是一个近似值。

        字符类型:char可以表示单个字符,但因为char类型占有两个字节,而汉字恰好也占有两个字节大小。所以一个char类型变量刚好可以存储一个汉字。每一个字符都是有对应的数值,并且这些数值都是通过二进制方式进行存储。下面看例子:

                

      一个字母字符转为int类型后会对应一个值,而用int类型赋值给char会直接转为字符a,这是因为每一个字符都在unicode码中有对应的编码,a的二进制编码就是(0110 0001)。所以在java中char的本质是一个整数,在输出时会按照对应的unicode字符输出。字符和码值对应关系是通过字符编码表决定的(是规定好的)。ASCII编码表,由一个字节表示,但最初的设置者只用了128个字符,因为只有26个英文字母和其余一些特殊符号。但由于计算机的普及,所有国家都开始发展并使用。仅仅容纳256个字符根本不够,并且一个汉字就占了2位。自然就诞生了unicode编码表后续又因为浪费空间,最终改进为现在我们常用的UTF-8编码表(字母占一个字节,汉字占三个字节)。不仅字符有对应的整数值,每个汉字也有对应的一个整数值。

        注意点:在java中,short和byte的转换默认都为int类型赋值。

         程序会进行报错,提示你无法进行int向byte的转换。解决办法就是进行强转换。

         布尔类型:在java中表示真与假只能用true和false不能像C语言一样用1和0表示!

       强转换符号只针对最近的操作数有效,往往会使用小括号提高优先级!否则会提示错误!

         本章内容到这里就结束了。我写博客的目的一是作为一个总结,因为我最近也在看韩顺平老师的30天学完java,另一个目的是能够帮助到别人巩固知识或者获得知识。如果你阅读完本章内容,发现你即使学习过java后依然能够有所收获或者你正在学习java然后获得了新知识,那么我写这篇文章的初衷就已经达到了。谢谢大家能够看到这里!(这是我写过的第一篇总结文章)

        本人是一位软工小白,欢迎各位来指正错误,让我们一起加油,共同进步!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捶捶自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值