开发者社区> lwmdrr6ypmnvi> 正文

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23579 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22350 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19804 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
14747 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36442 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16432 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14898 0
94
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载