0.思维导图总览
1.整型
- 整型用于表示没有小数部分的数值, 它允许是负数。
- 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的十进制值为160
short b0 = 0Xa0;
long c0 = 0xa0;
byte d0 = 0X10; // 10对应十进制16,不能用0xa0因为超过了byte数值范围
System.out.println(a0 + " " + b0 + " " + c0 + " " + d0);
// 八进制 0开头
int a1 = 010; // 10的十进制为8
short b2 = 010;
long c2 = 010;
byte d2 = 010;
System.out.println(a1 + " " + b2 + " " + c2 + " " + d2);
//二进制 0b或0B都行
int a3 = 0b100; // 100十进制的值为4
short 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对结果无影响
//可以为数字字面量加下划线,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 表示这种类型的数值精度是 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 类型的值可以表示为十六进制值,其范围从 \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) {
// byte
System.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();
// short
System.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();
// int
System.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();
// long
System.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();
// float
System.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();
// double
System.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();
// char
System.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.变量初始化
- 声明一个变量之后,必须用赋值语句对变量进行显式初始化, 不可以使用未初始化的
变量。
8.常量
- 在 Java 中, 利用关键字 final 指示常量。
- 关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,
常量名使用全大写。 如果一个常量被声明为 public,那么其他类的方法也可以使用这个常量
。- const 是 Java 保留的关键字,但目前并没有使用。在 Java 中, 必须使用 final
定义常量 - 在 Java 中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为
类常量
。可以使用关键字 static fina丨设置一个类常量。 下面是使用类常量的示例:
Test.java
public class Test {
public static void main(String[] args) {
System.out.println("半径为5的圆的面积为: "+A.P*5*5);
System.out.println("A半径为10的面积为"+A.jisuan(10));
}
}
A.java
public class A {
public static final float P=3.14f;
public static float jisuan(float r) {
return P*r*r;
}
}
参考:https://www.runoob.com/java/java-basic-datatypes.html
《java核心技术卷一第十版》