数据类型
1. 整数类型
基本介绍
Java的整数类型就是用于存放整数值的,比如 12 , 30, 3456等等
整型的类型
整型的使用细节
- Java各整数类型有固定的范围和字段长度,不受具体OS[操作系统]的影响,以保证java程序的可移植性。
- Java的整型常量(不能变化的量/值)(字面量, 1 ,45, 90)默认为 int 型,声明long型常量须后加‘l’或‘L’
- java程序中变量常声明为int型,除非不足以表示大数,才使用long
- bit: 计算机中的最小存储单位。byte:计算机中基本存储单元,1byte = 8 bit。[二进制再详细说,简单举例一个 byte 3 和 short 3 ]
- 思考题: long 类型,有几个 bit (8byte * 8 = 64 bit)
long n = 3;// 本质
代码演示
public class IntDemo{
public static void main(String []args){
//byte b1 = -129; // 报错 错误: 不兼容的类型:
//System.out.println(b1);
//常量
// 90 就是一个常量,也叫字面量
// num 是变量
int num = 90;
//细节:Java的整型常量(不能变化的量/值)(字面量, 1 ,45, 90)默认为 int 型,
//声明long型常量须后加‘l’或‘L’
//说明
//1. 默认的整数, 是 int 类型,比如 1, 2, 90, 78;
//2. 如果我们希望 1 , 2 是 L , 就应该这样写 1L, 2L
//错误: 不兼容的类型: 从long转换到int可能会有损失
//本质因为 -> 示意图
int num2 = 1L;
//细节java程序中变量常声明为int型,除非不足以表示大数,才使用long
// 比如 int age = 10; 不使用 long
//long age = 300;
//看个案例 => 到底b2 和 s1 在内存中怎样
byte b2 = 3;
short s1 = 3;
b2 = s1; //
}
}
2. 浮点类型
基本介绍
- Java的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12等等
浮点型的分类
浮点型使用细节
- 与整数类型类似,Java 浮点类型也有固定的范围和字段长度,不受具体OS的影响。[float 4 个字节 double 是 8个字节]
- Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
- 浮点型常量有两种表示形式
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 [ 5.12 * 10^2 ] 5.12E-2 [5.12 / 10^2] - 通常情况下,应该使用double型,因为它比float型更精确。[举例说明]
double num9 = 2.1234567851;
float num10 = 2.1234567851F; - 浮点数使用陷阱: 2.7 和 8.1 / 3 比较
- 代码演示
public class FloatDemo{
public static void main(String []args){
//Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’
//解读
//1. 2.2 就是 默认是double
//2. d1 也是double ,类型
double d1 = 2.2; //ok
//思路 1.0 是double , 编译器8个字节
// f1 是float , 编译器 4个字节
//float f1 = 1.0; //有精度损失
//细节 : 浮点型常量有两种表示形式
//5.12 512.0f .512
double f2 = 5.12;
float f3 = 512.0f; // 当常量后,加F,f, 表示float
double d2 = .512; // 0.512 可以省略 0
//细节:通常情况下(没有明确要求使用float),应该使用double型,因为它比float型更精确
double num9 = 2.1234567851;
float num10 = 2.1234567851F;
System.out.println("num9=" + num9);
System.out.println("num10=" + num10);
//浮点数使用陷阱: 2.7 和 8.1 / 3 比较 [坑]
double num11 = 2.7;
double num12 = 8.1 / 3; // 2.7
//看看计算机是如何结果, 小数都是近似值
//解决方法
//基本原则. 看两个数差的绝对值,是否在某个精度范围
//得到两个数的差的绝对值
//做项目时,该项目会说明(需求文档)
if(Math.abs(num11-num12) < 0.00000001) {
System.out.println("相等");
}
//细节1, 如果两个小数是直接赋值,不是计算得到,可以直接比较
double num13 = 2.7;
double num14 = 2.7;
if(num13 == num14) {
System.out.println("相等");
}
// System.out.println("num12=" + num12);
// if(num11 == num12){ //判断是否相等
// System.out.println("相等");
// } else {
// System.out.println("不相等");
// }
}
}
3. 字符类型(char)
基本介绍
字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符我们用字符串,在java中String这种,数据类型表示,但是String不是基本数据类型,而是类,类是复合数据类型。
字符类型使用细节
-
字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
-
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
-
在java中,char的本质是一个整数,在输出时,是unicode码对应的字符。 http://tool.chinaz.com/Tools/Unicode.aspx
-
可以直接给char赋一个整数,然后输出时,会按照对应的unicode 字符输出 [’\u0061’ 97]
5)char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码.
6)代码演示
public class CharDemo{
public static void main(String []args){
char c1 = 'a'; // 编码 = 97
//说明
//1. 在java中,字符的本质就是一个整数
//2. 该整数对应一个字符的码值, 比如ASCII码
char c2 = 97;
System.out.println(c2); // 'a'
char c3 = '\n'; //表示换行
System.out.println("hello");
System.out.println(c3); //换行
System.out.println("hello");
char c4 = '孙';
System.out.println((int)c1); // 表示把c1 的码值
System.out.println((int)c4); // 孙<--->23385
char c5 = 23385;
System.out.println(c5); // 孙
//\u0061 是按照16进制赋值 , 也可以理解成是unicode 赋值
char c6 = '\u0061'; //97
System.out.println("c6=" + c6); // c6=a
//char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
//解释
//1. 先把 c4 替换成 对应的 码值 23385
//2. 相加
int num1 = c4 + 10; // 23395
System.out.println("num1=" + num1); //
int num2 = c1 + c1; // 97 + 97
System.out.println("num2=" + num2); // 194
char c7 = '0';
//if('0' == 0 ) { // 48 == 0
等不等?
//}
}
}
字符类型本质探讨
-
字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来 , 比如’a’
存储: ‘a’ ==> 码值 97 ==> 二进制 ==> 存储
读取:二进制 => 97 ===> ‘a’ => 显示 -
字符和码值的对应关系是通过字符编码表决定的(是规定好)
-
介绍一下字符编码表 [editplus测试]
ASCII (ASCII 编码表 一个字节表示 , 一个128 个 字符)
Unicode (Unicode 编码表 固定大小的编码 使用两个字节来表示字符,字母和汉字统一都是占用两个字节,这样浪费空间 )
utf-8 (编码表,大小可变的编码 字母使用1个字节,汉字使用3个字节)
gbk (可以表示汉字,而且范围广 =>ANSI, 字母使用1个字节,汉字2个字节)
gb2312 (可以表示汉字,gb2312 < gbk)
big5 码(繁体中文, 台湾,香港)
4. 布尔类型:boolean
基本介绍
- 布尔类型也叫boolean类型,booolean类型数据只允许取值true和false,无null
- boolean类型占1个字节。
- boolean 类型适于逻辑运算,一般用于程序流程控制[这个后面会详细介绍]:
1.if条件控制语句;
2.while循环控制语句;
3.do-while循环控制语句;
4.for循环控制语句
public class BoolDemo{
public static void main(String[] args) {
//对于boolean 取值只能是 true 或者 false
boolean isPass = true; // 真
if(isPass) {
System.out.println("通过考试~~");
}
}
}
使用细节说明
不可以0或非 0 的整数替代false和true,这点和C语言不同