【JavaSE基础】基本数据类型族谱及易错点代码分析(上)

简介: Java有八大基本类型,很多同学只对经常使用的int类型比较了解。有的同学是刚从C语言转入Java学习,误以为两者的基本数据类型完全相同,这也是大错特错的。今天这本Java基本数据类型全解析大字典,可以帮助你直接通过目录找到你想要了解某一种基本数据类型。

⭐️问答小剧场⭐️



以下会产生信息丢失的类型转换是( )


              A.float a=10;


              B.int a =(int)8846.0;


              C.byte a=10;int b=-a  


              D.double d=100


🎃1.八大基本数据类型族谱


       Java的八大基本数据类型包括——byte、char、short、int、long、float、double、boolean(不包括String)。 其中byte、shory、int、long为整数类型,char为字符类型、float、double为浮点数类型(也可以理解为小数类型),boolean为布尔类型,只能取boolean或者false。


八大基本数据类型基本信息(建议收藏):


image.png


🎃2.八大类型细节解析


🎨1.byte


             byte是Java八种数据类型之一的字节关键字。我们通常说的占几个字节说的就是它了,byte由8个bit位组成。一个bit位指的是二进制的一位,也就是只能取0和1。但我们Java中除了boolean和char不区分正负号,其余类型都是有正负的,为了表示正负Java中用最高位的1个bit位来表示正负,0为正,1为负。我们直接通过二进制来找一找byte的取值范围


//首位为0表示正数,为1表示负数
        String a="01111111";
        System.out.println(Integer.parseInt(a,2));//127


从结果来看我们知道,当后面7位全取1首位取0时,byte能取到最大值为127,当首位为1时,取到最小负数为-127。诶?不对啊,上面明明说byte取值是[-128,127],照你这么说-128去哪了?别急,其实大家都忽略了一个问题,0是没有正负的,所以这时你不能说无论首个bit位是0还是1都当做0,这样肯定是不行的,不仅容易出问题还浪费资源空间。所以我们规定当为10000000时,看上去好像是-0,我们就把它当做为-128。这个大家了解一下即可,因为其中还涉及到一些正反补码的知识。


byte a= (byte)0B10000000;
       System.out.println(a);//-128

1.赋值报错以及强转原则  


image.png                              

先看上图的报错信息,首先a和b报错,提示我们提供的类型不对,这是因为我们赋的值超出了byte的取值范围,而且在Java中默认的整数类型为int,浮点数类型为double  。所以它这提示我们提供的类型不对。有的人肯定就说了,诶你不会强转吗?在我们Java中大的数据类型可以强转成小的数据类型 。难道你不知道吗?别急,当然可以强转,我们试试给两个超出byte范围内的值强转会怎样


byte a=(byte)10000;
        System.out.println(a);//16


         会发现10000强制后得到了16,它是怎么得来的呢?别急,我们来看看10000和16的的二进制表示        


System.out.println(Integer.toBinaryString(10000));//100111  00010000
        System.out.println(Integer.toBinaryString(16));//00010000

       发现没,10000的二进制表示的后八位,就是16的二进制表示,因为int类型占4个字节也就是32个bit位,而我们byte只有8个,所以当int强转为byte时,我们只取int的后8个bit位,取到多少则强转为多少。但是这里要注意我举的例子强转前后都是正数,当有负数时会发现好像我们的结论不成立,那是因为计算机在储存负数时是以反码的格式存储,我们平时看见的二进制都是正码,想深入了解的同学可以找文章了解一下,想自己举例验证的尽量都举一个强转前后都为正数的例子。


2.参与运算升级为int


image.png


    有些同学肯定会很纳闷,诶不对啊,我这两个byte一个10一个20相加得到30,30也没超出byte取值范围,咋说我得到的结果是int呢?这是因为在Java中有规定:在有byte、char、short参与运算时,得到的结果会自动提升为int类型。这是很多初学者都忽略的问题,大家一定要了解,这时是需要进行强转的,当然因为30并未超出byte取值范围,强转后c也为30。


相关文章
|
Kubernetes 应用服务中间件 nginx
使用kind搭建kubernetes
使用kind搭建kubernetes
384 5
|
11月前
|
机器学习/深度学习 人工智能 监控
探索人工智能的伦理困境:我们如何确保AI的道德发展?
在人工智能(AI)技术飞速发展的今天,其伦理问题也日益凸显。本文将探讨AI伦理的重要性,分析当前面临的主要挑战,并提出相应的解决策略。我们将通过具体案例和代码示例,深入理解如何在设计和开发过程中嵌入伦理原则,以确保AI技术的健康发展。
642 11
|
12月前
|
SQL 数据库 索引
SQL语句实现投影连接:技巧与方法详解
在SQL数据库操作中,投影连接(Projection Join)是一种常见的数据查询技术,它结合了投影(Projection)和连接(Join)两种操作
|
存储 网络协议 网络安全
IP路由详解:网络互联的心脏
【4月更文挑战第22天】
848 7
IP路由详解:网络互联的心脏
|
存储 Ubuntu 开发工具
在Ubuntu 16.04上安装Git的方法
在Ubuntu 16.04上安装Git的方法
232 0
|
小程序 开发工具 开发者
【微信小程序-原生开发】实用教程02-添加全局页面配置、页面、底部导航
【微信小程序-原生开发】实用教程02-添加全局页面配置、页面、底部导航
205 0
|
机器学习/深度学习 存储 人工智能
世界最快硬件加速器Groq LPU的底层架构设计!
【2月更文挑战第19天】世界最快硬件加速器Groq LPU的底层架构设计!
439 1
世界最快硬件加速器Groq LPU的底层架构设计!
|
人工智能 数据库 芯片
【报告介绍】中国AI大模型产业:发展现状与未来展望
【4月更文挑战第27天】中国AI大模型产业快速发展,受益于政策支持、技术创新及市场需求,已在电商等领域广泛应用,展现巨大潜力。但面临算力瓶颈、技术局限和数据不足等挑战。未来,AI大模型将向通用化与专用化发展,开源趋势将促进小型开发者参与,高性能芯片升级也将助力产业进步。[报告下载链接](http://download.people.com.cn/jiankang/nineteen17114578641.pdf)
714 2
|
测试技术 编译器
软件测试用例经典方法 | 逻辑覆盖测试法及案例
逻辑覆盖测试法是常用的一类白盒测试方法,其以程序内部逻辑结构为基础,通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。 逻辑覆盖测试法是一系列测试过程的总称,是使测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以将其分为语句覆盖、判定覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖等。接下来将通过下面程序的逻辑覆盖测试用例一一介绍这些覆盖准则,该程序的流程图如图4-1所示,其中,a、b、c、d、e是控制流上的若干程序点。
901 0
软件测试用例经典方法 | 逻辑覆盖测试法及案例
STM32外设系列—TB6612FNG
本文简单介绍了TB6612FNG,给出了接线方法和控制逻辑。最后,给出了程序设计,利用串口调节占空比来调节电机转速。
735 0
STM32外设系列—TB6612FNG