java学习笔记(二) - 数据类型

一、数据类型

1. 整型

类型 占用存储空间 范围
byte[字节] 1字节 -128~127
short[短整型] 2字节 -32768~32767
int[整型] 4字节 -2^31~2^31-1
long[长整型] 8字节 -2^63~2^63-1
  • Java的整型常量(具体值)默认为int型,声明long型常量须后加 l 或 L
  • bit:计算机中的最小存储单位
  • byte:计算机中基本存储单元1byte = 8 bit
  • byte范围使用原码和反码:[-127,127],使用补码表示:[-128,127]

2. 浮点数

类型 占用存储空间 范围
单精度float 4字节 -3.403E38~3.403E38
双精度double 8字节 -1.798E308~1.798E308
  • 浮点数在机器中存放形式:浮点数=符号位+指数位+尾数位
  • 尾数部分可能丢失,造成精度损失(小数都是近似值)

  • Java 的浮点型常量(具体值)默认为double型,声明float型常量,须后加 f 或 F

  • 浮点型常量表示方法:
    • 十进制数形式:5.12 512.0f .521
    • 科学计数法形式:5.12e2 5.12E-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class FloatDetail {
//编写一个main方法
public static void main(String [] args) {
//定义常量a = 0.345
double a = .345;
//科学计数法计算
double b = 3.14E2;
double c = 3.14e-2;
System.out.println(b);
System.out.println(c);
System.out.println(a);

//浮点数使用陷阱:2.7 和 8.1 / 3
double num1 = 2.7;
double num2 = 8.1 / 3;
System.out.println(num1);//2.7
System.out.println(num2);//接近2.7 为2.6999999

//重要使用点:当我们对运算结果是小数的进行相等判断需注意
//应该是两个数的差值的绝对值,在某个精度范围类判断
// if( num1 == num2 ) {
// System.out.println("相等");
// }
if(Math.abs(num1 - num2) < 0.00000001) {
System.out.println("差值非常小,到我们的规定精度,认为相等...");

}
//可以通过java API查看
System.out.println(Math.abs(num1 - num2));
}
}

3. 字符类型

  • char可以表示单个字符,占两个字节

  • 字符常量是用单引号(‘’)括起来的单个字符

  • char的本质是一个整数,在输出时是unicode码对应的字符
    http://tool.chinaz.com/Tools/Unicode.aspx
  • 可以直接给char赋一个整数,然后输出时,会按照对应的unicode字符输出
  • char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码

4. 布尔类型

  • 布尔类型也叫boolean类型,booolean类型数据只允许取值true和false,无null
  • boolean类型占1个字节

二、基本数据类型转换

1. 自动转换类型

  • 当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型

1.1 细节

  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
  • byte、short、char之间不会相互自动转换
  • byte、short、char他们三者可以计算,在计算时首先转换为int类型
  • boolean不参与转换
  • 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型

2. 强制转换类型

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出
1
2
3
4
5
char c1 = 100;
int m = 100;
char c2 = m;
char c3 = (char)m;
System.out.println(c2);

三、基本数据类型和String的转换

1. 基本类型的值 + “”

1
2
3
4
5
6
7
8
int n1 = 100;
fLoat n2 = 1.1f;
double n3 = 3.4;
booLean b1 = true;
String str1 = n1 +"";
String str2 = n2 +"";
String str3 = n3 +"";
String str4 = b1 + "";

2. 调用parseXX方法

1
2
3
4
5
6
7
Integer.parseInt("123");
Double.parseDouble("123.1");
FLoat.parseFloat("123.45");
Short.parseShort("12");
Long.parseLong("12345");
BooLean.parseBoolean("true" );
Byte.parseByte("12");