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


相关文章
|
8月前
|
安全 Java
从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
|
8月前
|
存储 Java
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
【5月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
67 2
滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
|
7月前
|
Java
JavaSE 面向对象程序设计 包装类 纯理论详解以及相关综合练习
JavaSE 面向对象程序设计 包装类 纯理论详解以及相关综合练习
31 1
|
7月前
|
存储 Java 编译器
Java核心技术第八章-泛型
Java核心技术第八章-泛型
|
8月前
|
存储 安全 Java
源码必备知识:泛型
源码必备知识:泛型
51 2
|
8月前
|
安全 Java 程序员
Java泛型编程:技巧与实践
Java泛型编程:技巧与实践
104 1
|
8月前
|
Java 程序员
揭秘编程语言中的强大工具:方法重载的终极指南
揭秘编程语言中的强大工具:方法重载的终极指南
29 0
|
存储 设计模式 Java
Java 修饰符详解:吐血整理,带你从底层语法和开发案例疏通这 11 种常见修饰符
Java 修饰符详解:吐血整理,带你从底层语法和开发案例疏通这 11 种常见修饰符
404 0
Java 修饰符详解:吐血整理,带你从底层语法和开发案例疏通这 11 种常见修饰符
|
安全 Java 编译器
Java泛型——简介
Java泛型——简介
98 0
|
存储 Java 编译器
【JavaSE基础】基本数据类型族谱及易错点代码分析(下)
【JavaSE基础】基本数据类型族谱及易错点代码分析
124 0
【JavaSE基础】基本数据类型族谱及易错点代码分析(下)