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

简介: 【JavaSE基础】基本数据类型族谱及易错点代码分析

🎨2.short    


              这里将short放到前面讲,是因为它和byte的性质其实差不多,只不过它的取值范围更大一些,但依旧小于int。short也是一个短整型数据类型,它占两个字节,那也就是16个bit位。我们同样通过代码尝试找一下它的最大值。


public static void main(String[] args) {
        String a="0111111111111111";//首位bit用来表示正负
        System.out.println(Integer.parseInt(a,2));//32767
    }


             我们很容易可以看出short可以取得的最大值为32767,当首位bit位为1时则取到-32767。同样要留心像byte一样-0的情况,这时我们定义它的值为-32768。所以short的取值范围为[-32768,32767] 。short的易错点和byte其实一样,当给short赋值一个超出short的取范围时,数默认为int类型,因为short只占16个bit位,int类型占32个,则会舍掉前16个留后16个给short。同样short参与运算时也会升级为int,所以除了取值范围,short和byte的性质差不多。short也可以说是八大基本数据类型可以说是最冷门的一个了。


🎨3.int


         作为最常用的数据类型,int相信是大家最熟悉的基本数据类型了。它占4个字节,也就是32个bit位。这里就不再重复上面步骤。因为是32位,除去一位符号位,在这顺手一提,Java中的基本数据类型中是没有无符号类型的,所以还剩31个bit位表示值。则取值范围为[-2147483648 ~ 2147483647] 。之所以int能成为我们最常用的基本数据类型,就是因为它的取值范围足够我们大多数的场景使用,选太大的long类型占用空间大浪费资源,选太小的short和byte容易溢出,而int的取值范围则恰好合适。


🎨4.long


        long类型属于长整数数据类型,它占8个字节,也就是64个bit位。所以它的取值范围为[-9223372036854774808 ~ 9223372036854774807]。可以看出这个数是非常大的,但是因为太占内存,我们很少使用它。通常在运算时可能超出int类型造成溢出,我们才会使用long类型。如果直接给long类型赋值时,我们需要注意在末尾加上L或l,这是为什么呢?我们来用代码看看


image.png


    发现没,我特意举的这个例子,当数在int范围内它没有报错,当超过int了它居然说整数过大?我long类型最大能取9223372036854774807你居然敢说我过大?难道你把我当成int了?你还真别说,JVM真把你当成int了,因为Java中整数类型都默认为int,你这是一个超过int类型的数它当然会提示过大。所以我们最好养成习惯,在给long类型赋值时,最好在末尾加上个L,告诉JVM我这是个long类型的值。


image.png


🎨5.char


        char类型属于字符类型,也是我们用的比较多的类型。它的存储占2个字节,也就是16个bit位,和short一样,那取值范围一样吗?当然不一样啦!char是取不了负号的,所以它不需要用1个bit位来表示正负,所以它的取值范围是[0,65535]。有的人肯定纳闷了,诶不对啊,char不是字符类型吗?那不是应该是什么a啊b啊这种字符吗?这就涉及到ACSII表了,我们的每个字符都可以用一个整数去表示,所以当你赋值一个合法范围内的整数,它就会自动转换为对于的字符,具体是什么字符就要去记一下ACSII表了


char a=97;
        char b=98;
        System.out.println(a);//a
        System.out.println(b);//b


       如上图,97对于的为字符'a',98对于的为字符'b'。所以大家这里记住,26个小写的字母对应的ACSII表是从[97,122]。


      这里也要注意,char参与运算时,也是会升级为int类型,这里我们在前面提过,如果这时我们将结果赋值给char就会无法通过编译,需要进行强转。  就像如图报错,大家要注意这个细节。


image.png


       当我们给char类型赋值一个超出取值范围的整数时,编译器此时会报错,这时我们需要进行强转。因为int是32位bit,char只有16位,所以char只会取int的后16位,然后转化为对于的字符。


🎨6.float


       float是浮点数类型中的单精度,在计算机中占用4个字节,也就是32个bit位,有效的位数为7位,浮点数类型也就是我们的小数类型。通常我们在给float赋值时,因为在其末尾加上f,以告知jvm我们这是float类型,我们直接给一个小数赋值,它会出现下面这种情况。


image.png


     这是为什么呢?在整数类型中,我们默认的类型为int,而在浮点数类型中我们默认的类型为double。你给float赋值一个double当然会报错,这时就需要你进行强转,这时就会有损失精度的可能性。那为什么可以给float赋值一个int类型的值呢?虽然float虽然和int一样都占4个字节,但浮点数类型是比整数类型更大的,所以我们给float赋值int类型是可以的,它会自动加上小数部分,当给int赋值float时则会报错,需要强转,强转后所有的小数部分都会丢失。  


image.png


🎨7.double


       double是Java中基本数据类型中浮点数类型的默认类型。它占八个字节,和long一样,开销还是比较大的,它是双精度。很多人好奇双精度和单精度有什么区别?其实也就是范围的问题,double有效的位数为16位。浮点数的使用唯一要记住的就是,能尽量使用float就float,因为double实在太占内存,而且运行速度慢于float。double赋值给float需要进行强转,即使有可能输出的值并未改变。


image.png


     double也是除去boolean类型里最大的数据类型,它可以强转为其余六种数据类型,不过当然会有精度的损失,将这六种数据类型赋值给double它都可以接收。


image.png


🎨8.boolean


       作为八大基本数据类型最特殊的一种,boolean显得有些格格不入。它只占一个字节,因为它只有两种取值,boolean和false。这里需要提醒大家的是,C语言中可以用0和非0分别代表false和true,但这在Java中是不允许的。boolean类型也不可以接收其他基本数据类型的值,其他的基本类型也不可以强转为Boolean。


🎃2.小剧场解答


答案选B。


       产生精度丢失只会出现在强转的情况下,也就是大的数据类型转为小的,在这里只有B选项产生了强转,由float转为int。


相关文章
|
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 C语言
【JavaSE基础】基本数据类型族谱及易错点代码分析(上)
Java有八大基本类型,很多同学只对经常使用的int类型比较了解。有的同学是刚从C语言转入Java学习,误以为两者的基本数据类型完全相同,这也是大错特错的。今天这本Java基本数据类型全解析大字典,可以帮助你直接通过目录找到你想要了解某一种基本数据类型。
185 0
【JavaSE基础】基本数据类型族谱及易错点代码分析(上)

热门文章

最新文章