java数据类型(整型、浮点型、char类型、boolean型、类型转换)
文章目录
- 0.思维导图总览
- 1.整型
- 2.浮点型
- 3.char型
- 4.boolean型
- 5.java内置常量对应数据类型的取值范围
- 6.数据类型默认值
- 7.数值类型之间的转换
- (1)定义数据类型后自动转换
- (2)二元运算时的自动转换
- (3)强制类型转换
- 8.参考
本篇文章已收录到:https://www.bithachi.cn/posts/abf8abd7.html
0.思维导图总览

1.整型
- 整型用于表示没有小数部分的数值, 它允许是负数。
默认的整型为int型

- byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用
存储空间量的大数组。 - 在 Java 中, 整型的范围与运行 Java 代码的机器无关。这就解决了软件从一个平台移植到
另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。 - 长整型数值有一个后缀 L 或 l ( 如 4000000000L。)
- 十六进制数值有一个前缀 0x 或 0X (如0xCAFEL
- 八进制有一个前缀 0 , 例如, 010 对应八进制中的 8。
- 很显然, 八进制表示法比较容易混淆, 所以建议最好不要使用八进制常数。
- 从 Java 7 开始, 加上前缀 0b 或 0B 就可以写二进制数。例如,0bl001就是 9。
- 从 Java 7 开始,还可以为数字字面量加下划线,如用 1_000_000(或者0b1111_0100_0010_10 00_0000 )表示一百万。这些下划线只是为了让人更易读。·
Java 编译器会去除这些下划线。 - 在 Java 中, 所有的数值类型所占据的字节数量与平台无关。
- 注意: Java 没有任何无符号(unsigned) 形式的 int、 long、short 或 byte 类型。
- 代码测试
public class Test {public static void main(String[] args) {// 十六进制 0x或0X都可行int a0 = 0xa0; // a0的十进制值为160short b0 = 0Xa0;long c0 = 0xa0;byte d0 = 0X10; // 10对应十进制16,不能用0xa0因为超过了byte数值范围System.out.println(a0 + " " + b0 + " " + c0 + " " + d0);// 八进制 0开头int a1 = 010; // 10的十进制为8short b2 = 010;long c2 = 010;byte d2 = 010;System.out.println(a1 + " " + b2 + " " + c2 + " " + d2);//二进制 0b或0B都行int a3 = 0b100; // 100十进制的值为4short b3 = 0B100;long c3 = 0B100;byte d3 = 0b100;System.out.println(a3 + " " + b3 + " " + c3 + " " + d3);long long1 = 100;long long2 = 100l;long long3 = 100L;System.out.println(long1 + " " + long2 + " " + long3);//从结果可以看出不加l或L对结果无影响//当数值超过int的范围时必须加上L//可以为数字字面量加下划线,Java 编译器会去除这些下划线int a4 = 1____00___00;short b4 = 2_0_3_0;long c4 = 19____00;byte d4 = 10_1;System.out.println(a4 + " " + b4 + " " + c4 + " " + d4);}
}

2.浮点型
- 浮点类型用于表示有小数部分的数值,
默认的浮点型为double型

- double 表示这种类型的数值精度是 float 类型的两倍(有人称之为双精度数值)
- 实际上,只有很少的情况适合使用 float 类型,例如,需要单精度数据的库, 或者需要存储大量数据。
- float 类型的数值有一个后缀 F 或 f (例如,3.14F。) 没有后缀 F 的浮点数值(如 3.14 ) 默认为 double 类型。
- 当然,也可以在浮点数值double后面添加后缀 D 或 d (例如,3.14D),不加也可以。
- 可以使用十六进制表示浮点数值。例如,0.125=2-3 可以表示成 0x1.0p-3。在十六进制表示法中, 使用 p 表示指数, 而不是 e。
注意, 尾数采用十六进制,指数采用十进制。指数的基数是 2,而不是 10。对于十六进制表示我没怼出来,还请大佬多多指教,留个言教教我,抱拳了! - 所有的浮点数值计算都遵循
IEEE 754规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
•正无穷大
•负无穷大
•NaN (不是一个数字)
例如, 一 正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。
常量Double.POSITIVE_INFINITY、 Double.NEGATIVE_INFINITY 和 Double.NaN
( 以及相应的 Float 类型的常量) 分别表示这三个特殊的值, 但在实际应用中很少遇到。 - 特别要说明的是, 不能这样检测一个特定值是否等于
Double.NaN:
if (x = Double.NaN) // is never true
- 所有“ 非数值” 的值都认为是不相同的。然而,可以使用 Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is "not a number"
-
浮点数值
不适用于无法接受舍入误差的金融计算中。 -
例如,命令 System.out.println( 2.0-1.1 ) 将打印出 0.8999999999999999, 而不是人们想象的 0.9。

-
这种舍入误差的主要原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。 这就好像十进制无法精确地表示分数 1/3—样。
-
如果在数值计算中
不允许有任何舍入误差,就应该使用 BigDecimal类 -
代码测试
public class Test {public static void main(String[] args) {float a = 100.111f;float b = 100.111F;double c = 100.111;double d = 100.111D;double e = 100.111d;System.out.println(a + " " + b + " " + c + " " + d + " " + e);System.out.println(Double.POSITIVE_INFINITY);System.out.println(Double.NEGATIVE_INFINITY);System.out.println(Double.NaN);}
}

3.char型
- char 类型原本用于表示单个字符。不过,现在情况已经有所变化。 如今,有些 Unicode
字符可以用一个 char值描述,另外一些 Unicode 字符则需要两个 char 值。 - char 类型的字面量值要用
单引号括起来。 - char a=’’,什么都不写报错,可以存个空格。
- char 类型的值可以表示为十六进制值,其范围从 \u0000 到 \Uffff。例如: \u03C0 表示希腊字母 π。
- 除了转义序列 \u 之外,
还有一些用于表示特殊字符的转义序列。所有这些转义序列都可以出现在加引号的字符字面量或字符串中。例如,’\u2122’ 或 “Hello\n”。 - 转义序列 \u还可以出现在加引号的
字符常量或字符串之外(而其他所有转义序列不可以)。例 如:
public static void main(String\u005B\ u00SD args)
就完全符合语法规则, \u005B 和 \u005D 是 [ 和 ] 的编码



代码测试:
public class Test {public static void main(String[] args) {// \u000A asdasda// Look inside c:\users}
}


- 抱着玩的兴趣测试了一下\u转义序列
- Unicode转义字符序列的官网 http://www.52unicode.com/

4.boolean型
- boolean (布尔)类型有两个值:
false 和 true, 用来判定逻辑条件 整型值和布尔值之间
不能进行相互转换。

5.java内置常量对应数据类型的取值范围
public class Test {public static void main(String[] args) {// byteSystem.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);System.out.println("包装类:java.lang.Byte");System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);System.out.println();// shortSystem.out.println("基本类型:short 二进制位数:" + Short.SIZE);System.out.println("包装类:java.lang.Short");System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);System.out.println();// intSystem.out.println("基本类型:int 二进制位数:" + Integer.SIZE);System.out.println("包装类:java.lang.Integer");System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);System.out.println();// longSystem.out.println("基本类型:long 二进制位数:" + Long.SIZE);System.out.println("包装类:java.lang.Long");System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);System.out.println();// floatSystem.out.println("基本类型:float 二进制位数:" + Float.SIZE);System.out.println("包装类:java.lang.Float");System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);System.out.println();// doubleSystem.out.println("基本类型:double 二进制位数:" + Double.SIZE);System.out.println("包装类:java.lang.Double");System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);System.out.println();// charSystem.out.println("基本类型:char 二进制位数:" + Character.SIZE);System.out.println("包装类:java.lang.Character");// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台System.out.println("最大值:Character.MAX_VALUE="+ (int) Character.MAX_VALUE);}
}

6.数据类型默认值
public class Test {static boolean bool;static byte by;static char ch;static double d;static float f;static int i;static long l;static short sh;static String str;public static void main(String[] args) {System.out.println("Bool :" + bool);System.out.println("Byte :" + by);System.out.println("Character:" + ch);System.out.println("Double :" + d);System.out.println("Float :" + f);System.out.println("Integer :" + i);System.out.println("Long :" + l);System.out.println("Short :" + sh);System.out.println("String :" + str);}
}

7.数值类型之间的转换
(1)定义数据类型后自动转换
- 数值类型之间的转换就是自动将一种数据类型转换成另一种数据类型
- 数值类型之间自动转换时的表:

package JavaSE.Chapter3.Section35.cs352;public class mains {public static void main(String[] args) {/*可能会出现信息丢失的转换情况*/int a=1234567899;long b=1234567891234567891L;float fa=a,fb=b;//单精度浮点型只保留8位小数double da=a,db=b; //双精度浮点型只保留16位小数System.out.println(fa);System.out.println(fb);System.out.println(da);System.out.println(db);/*不会出现信息丢失的转换情况*/byte b1=123;short s1=b1;int i1=b1;long l1=b1;System.out.println(s1);System.out.println(i1);System.out.println(l1);short s2=12345;int i2=s2;long l2=s2;System.out.println(i2);System.out.println(l2);int i3=1234567891;long l3=i3;double d3=i3;System.out.println(l3);System.out.println(d3);char c1='A';int i4=c1;System.out.println(i4);float f1=123.12345f;double d4=f1;System.out.println(f1);System.out.println(d4);}
}

- 这里浮点型取值范围与计算机组成原理里面讲的IEEE754标准有关
(2)二元运算时的自动转换
- 此外两种不同类型的数据进行二元运算时,比如加减乘除,数据转换从位数少的数据类型向位数多的数据类型转换,然后再进行二元运算。
- 比如char是1个字节,int是4个字节,char+int,两种数据类型相加,得到的是一个整数。
char ch2='A';int i=1;double d1=100.11d;System.out.println(ch2+i);System.out.println(d1+i);System.out.println(d1+ch2);

(3)强制类型转换
- 比如说将double转换为int型,即不按照上面所提到的转换表表进行合法转换
- 强制类型转换将小数部分截去,将浮点值转换为整型值

- 如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值

- 不要将boolean与其它数据类型进行转换
- 可以用条件转换
x? 1:0代替
8.参考
- https://www.runoob.com/java/java-basic-datatypes.html
- 《java核心技术卷一第十版》
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
