【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。


相关文章
|
9月前
|
JavaScript 前端开发 程序员
TypeScript 类 第三章 【抽象类,类的高级技巧】
TypeScript 类 第三章 【抽象类,类的高级技巧】
96 2
|
9月前
|
存储 Java
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
【5月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
74 2
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
|
8月前
|
Java
JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解
JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解
53 3
|
8月前
|
Java
JavaSE 面向对象程序设计高级 方法引用 2024详解
JavaSE 面向对象程序设计高级 方法引用 2024详解
31 0
|
存储 SQL 安全
教你精通JavaSE语法之第七章、类和对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好!一切皆为对象!面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。
96 0
|
XML 安全 Java
教你精通Java语法之第十三章、反射
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到,那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。1. 反射的意义2. 反射重要的几个类: Class类 、Field类、 Method类、 Constructor类3. 学会合理利用反射,一定要在安全环境下使用。
88 0
|
自然语言处理 Go
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
182 0
JavaSE:第十一章:泛型
JavaSE:第十一章:泛型
JavaSE:第十一章:泛型
|
Java C++ Ruby
对 Ruby 中内存泄漏的“浅”探究
对 Ruby 中内存泄漏的“浅”探究
248 0
|
存储 Java 编译器
【JavaSE基础】基本数据类型族谱及易错点代码分析(下)
【JavaSE基础】基本数据类型族谱及易错点代码分析
127 0
【JavaSE基础】基本数据类型族谱及易错点代码分析(下)

热门文章

最新文章