龙空技术网

Java数据类型

RuntimeException 44

前言:

今天我们对“java怎么表示范围”可能比较注重,同学们都想要知道一些“java怎么表示范围”的相关文章。那么小编在网络上汇集了一些关于“java怎么表示范围””的相关内容,希望咱们能喜欢,各位老铁们快快来学习一下吧!

在Java中的数据类型,分为引用类型和基本数据类型。本文主要讲解8种基本数据类型,引用类型将在面向对象中详细讲解。

在8种基本数据类型中整型有4种:byte,short,int,long;浮点型有2种:float,double;字符型有1种:char;布尔型有一种:boolean。

整数类型

整数类型byte,short,int,long,都是有符号(补码)整数,即有正负之分。

不同整数类型的取值范围

整数字面量(如:123,45)默认是int类型,在不超长小类型范围的情况下,大类型的数据给小类型直接赋值(在编写程序过程中会逐步体会)。

byte b1 = 128; //错误的语句,超范围赋值byte b2 = 127 // 合法赋值byte b3 = -128 // 合法赋值

使用整数类型byte,short,int时要注意取值范围,(-128~127)之间的整数字面量可以直接赋值给byte类型,Java会自动处理符号位,如-8在计算机中以1111 1111 1111 1111 1111 1111 1111 1000表示,如果使用byte = -8语句赋值,则Java自动截掉前面的24位,同理,short类型也是一样(short极少使用)。

Java 底层中byte、short按照32位计算,在输出byte,short的二进制时,会自动类型转换,如下代码将输出32个1,而不是16个1。

short s = -1;System.out.println(Integer.toBinaryString(s)); // 32个1

上面的代码等同于:

short s = -1;int i = s;System.out.println(Integer.toBinaryString(i)); // 32个1

long类型的字面量需要使用“L”或“l”作为后缀,否则不能编译通过。看如下代码:

long l = 12123123123; // 错误代码,为什么错?long l2 = 12123123123L; // 正确代码
浮点数类型

浮点数类型是用于表示数学中带小数的数据类型,也就是二进制科学计数法。

10进制浮点数科学计数法:219345 = 2.19345*(10^5)

2进制浮点数科学计数法:10111 = 1.0111*(2^100)

float 类型共32位(与int相同),第1位为符号位,2-9(8位)位为指位,最后23位为尾数。需要强调的是float的精度是23位(即能精确表达23位的小数,超过就被截取了)。小数是以尾数长度来表示精确度,比如pi=3.14,它的精度是2位,pi=3.1415,它的精度就为4位。

比较有趣的是int的精度比float要大,因为int的精度是31位,大于float。因为int类型的范围是(-2^31)~(2^31-1),而float的范围是(-2^128)~(-2^128-1),所以记住:int类型的数据能表示的范围比float类型小,int类型数据表示的精度比float大。

结论:浮点数没有int精确(尾数),浮点数范围比int大(指数)

float类型因为精度低,所以一般很少使用,一般我们会使用double。

double类型能表示64位,其中1位符号位,11位指数,52位尾数(不用记存储格式,知道一般小数用double足够表示了)。

如图所示,double能表示的范围就比float要大,也更精确。

double精度比int精确,但是不如long;double范围远远大于long。

需要注意的是,浮点数的字面量默认是double, double需要加后缀D 、d,float加后缀 f F。

字符类型 char

字符类型是经常用到,比较有趣。字符类型是一个16位无符号整数,是一个2进制数,这个数值是一个字符的unicode编码值。

Unicode编码,是全球范围内的编码方法,编制了英文,中,日,韩,阿拉伯,希伯来等等共8万多个字符(Unicode编码在设计的时候就旨在能表示世界上所有文字)。

Java char的范围0~65535不能表示全部Unicode。

Unicode编码中英文部分与ASCII码兼容(ASCII表示范围0~128),同时英文字符和数字是连续编码的。

编码是什么?在计算机中不能直接存储文字,只能有用0和1表示,那么我们人为做了规定,某个数除了表示一个数,还可以表示成一个字符。一个10进制数65代表的字符就是大写字母A。

这一切都是为了尽可能的按人们的习惯显示和输出,在计算机内部永进是0和1存储和运算的。 如下图,20013按字符输出是"中",按数字输出是20013。

char类型是无符号的16位整数,最小值为0, 最大值为65535 = 2^16-1,在程序中为一个字符变量赋值,需要用单引号()')将字符字面量括起来,可以为char赋值的有字符、数字、符号,如下图所示:

注意:特殊字符采用转义字符表示,如:

'\n' 表示回车 '\t' 表示制表位字符 '\\' 表示\ '\'' 表示单引号 '\"' 表示双引号 '\u4e2d'表示unicode 编码对应的字符布尔类型

只有真(true)和假(false)两个值。一般用于判断语句块中,如下图:

数据类型转换

自动类型转换

正方向,小类型到大类型的转换会自动完成。自动类型转换也叫"隐式类型转换", 是自动发生的, 一 般不需要处理。

转换规则:符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变,

注意:整数转换为浮点数会损失精确度。

强制类型转换

强制类型转换,也叫显示类型转换, 是按照反方向进行转换, 这种转换会溢出, 或者损失精度,要注意数据的范围。

需要注意的是,执行强制类型转换时,应规避边界数风险。 如下图强制类型转换代码所示,强制类型转换后数据变了,所以强制类型转换是有风险的,在使用时一定 要考虑源数据类型有没有超过目标数据类型的叏值范围:

标签: #java怎么表示范围 #java中的runtime