资讯专栏INFORMATION COLUMN

从0开始学JAVA(1) 数据类型

bigdevil_s / 1548人阅读

摘要:且可以使用进行中文保存,是因为使用这种进制的编码。那么怎么解决呢看出来区别了吗由于的自动类型转换,会转换为类型,所以数据溢出的问题就解决了。除非到不得已情况,不然不要轻易使用强制类型转换。

Java语言中对于数据类型分为2种

基本数据类型(一些具体的数字单元,例如 1 、 1.1、)

数值型:

整形:byte、 short、int、 long -->默认值:0

浮点型 float、double -->默认值:0.0

布尔型: boolean -->默认值:false

字符型:char -->默认值"u0000"

引用数据类型(牵扯到数据内存的使用)

数组、类型、接口 -->默认值:null

浮点型数据

对于java中的小数类型的常量,其对应的类型都是double类型,就类似整数类型的常量对应的是int类型。

字符型

在任何编程语言中,字符都可以和int相互转换,字符转化成int将得到对应的系统编码。
例子:

int num5 = "A";
System.out.println(num5);//65

字符编码参考:

大写字母"A"(65)~"Z"(90)
小写字母"a"(97)~"z"(122)
数字范围 "0"(48)~"9"(57)

可以发现大小写字母之间的编码差32,由此可以实现英文字母大小写的转换。
且java可以使用char进行中文保存,是因为java使用unicode这种16进制的编码。

数据类型选择规则

如果要描述数字,首选int、double

如果要进行数据传输或者文字编码使用byte类型(二进制处理操作)

处理中文最方便操作使用的是char

描述内存或者文件大小、或者描述表的主键使用long

注意 数据溢出问题

数据类型可以进行转换的,范围小的数据类型可以自动转换为大的数据类型,但是数据大的要转为小的则需要进行强制转换,同时还需要注意因此带来的数据溢出问题。示例如下。

猜猜结果是什么?
int num = Integer.MAX_VALUE;
System.out.println(num + 1);

结果是-2147483648,为什么呢?
因为num是int类型,int类型得最大值是2147483647,那么当+1之后,由于int+int的值还是int类型,而结果显然大于了这个数字,因此造成了数据溢出,导致结果计算错误。
那么怎么解决呢?

int num1 = Integer.MAX_VALUE;
System.out.println(num + 1L);

看出来区别了吗?由于java的自动类型转换,num+1L会转换为long类型,所以数据溢出的问题就解决了。

强制转换可能导致数据溢出
隐式转换也叫作自动类型转换, 由系统自动完成.从存储范围小的类型到存储范围大的类型
byte ->short(char)->int->long->float->double

显示类型转换也叫作强制类型转换, 是从存储范围大的类型到存储范围小的类型.
显示类型转换需要进行声明,但是当心会出现精度丢失的问题如:

long longNum = Integer.MAX_VALUE + 1;
int num2 = (int)longNum;
System.out.println(num2);//-2147483648

结果显然是因为精度丢失导致的结果不对,此处需要注意。除非到不得已情况,不然不要轻易使用强制类型转换。

byte类型需要注意的地方

那么再思考一下如下代码结果是什么呢?

//此处20是int类型,但java对byte类型赋值有特殊处理
//如果该值没有超过byte最大值,则会自动转换为byte类型进行赋值。
//如果超过byte最大值,才会要求强制转换
byte num4 = 20;
System.out.println(num4 * num4 );

答案是:400
那为什么此处400超过byte最大值127而未发生数据溢出?
再看下如下代码

byte num4 = 20;
byte result = num4 * num4;
System.out.println(result);

结果是什么?
会编译错误!为什么?因为此时num4 * num4 的结果超过了byte类型最大值,所以是int类型,那么此处就需要强制转换才能够防止编译错误。
当然实际中不会这么写,此处只是为了说明byte的变量赋值机制。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76231.html

相关文章

  • 开始 Kotlin 之「2」数据类型

    摘要:前言大家好,这里是从零开始学之数据类型,本文首发于公众号,欢迎前往大家关注。输出布尔类型中的布尔类型用表示,它的值有和。若需要可空引用时,布尔类型的值会被装箱。此时程序会抛出异常最后从零开始学之数据类型到这里就结束了。 前言 大家好,这里是「从零开始学 Kotlin 之『2 』数据类型」,本文首发于公众号「Binguner」,欢迎前往大家关注。我会每周分享一些关于 Android 和...

    Awbeci 评论0 收藏0
  • 开始 Java 之 基础语法(中)

    摘要:下面开始今天的知识,先看下基础语法的总纲今天我们接着学习变量使用变量的注意事项数据类型和类型转换。推荐阅读从零开始学之基础语法上从零开始学之基础概述本文原创发布于微信公众号,编程思维成长正能量,关注并回复编程阅读等关键字获取免费学习资料 showImg(https://segmentfault.com/img/remote/1460000016134163); Java 基础断更一周了...

    chinafgj 评论0 收藏0
  • Java零基础入门笔记|原来Java可以这么简单

    摘要:刚开始学习的时候,可能是一头雾水,不知道从何学起。这个教程总体来说就像列文虎克教学,细到极致,妙到毫巅。适合绝对零基础的,每个知识点掰开了揉碎了讲解。 刚开始学习java的时候,可能是一头雾水,不知道从何学起。还有很多Java小白,在刚自学Java的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英...

    2bdenny 评论0 收藏0
  • 基础 Java】运算符和数据类型

    摘要:是一种强类型语言,因此,定义了基本数据类型。运算符先从运算符谈起。基本数据类的基本数据类型同其它高级程序语言比较类似。常用类类型除了一些基本数据类型,提供的一些类类型,使用频率也很高。 Java 是一种强类型语言,因此,Java 定义了基本数据类型。同时, Java 和其它高级计算机语言一样,有多种运算符,这在我们编程过程中极为有用。 运算符 先从运算符谈起。 顾名思义,运算符解决的是...

    izhuhaodev 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<