刚开始学习Java,把老师上课讲的整理了一下~~
1.计算机存储单元
计算机存储设备的最小信息单元叫位(bit),又称之为比特位,通常用小写的字母b表示。
而计算机中最小的存储单元叫字节(byte),通常用大写字母B表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位:
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
2.基本数据类型
Java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。
数据类型内存占用和取值范围
说明:e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方
2.1 整数类型:byte、short、int、long
- Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
- java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
- java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
2.2 浮点类型:float、double
与表示整数的整型不同,浮点型代表的是实数,其实就是包含小数的部分。
一、浮点型常量
Java的实常数有两种表示形式:
1.十进制数形式,由数字和小数点组成,且必须有小数点,如0.123, .123, 123. ,123.0等等 。
2.科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。
3.浮点型常量的默认类型是double,当我们想要表示一个float类型的浮点数的时候 此时我们就需要在数值后边加上一个F或者f。
float f = 3.14F;
二、浮点型变量
浮点型变量的类型有float和double两种。
双精度类型double比单精度类型float具有更高的精度,和更大的表示范围,常常用于科学计算等高精度场合。
public static void main(String[] args){
float f = 3.14F;
double d = 3.14D;
float f1 = 0.1f;
double d1 = 1.0/10;
System.out.println(f1 == d1);//false
float f2 = 42323442F;
float f3 = f2 +1;// f2与f2+1 是否相等?
System.out.println(f2==f3);//true
}
以上代码 由于收到长度和精度的限制,无法精确地去表示一些浮点数 只是近似的等于 。所以,当我们在遇到需要精确表示小数的时候 特别是金融方面的时候,千万不要直接使用float和double去表示。
2.3字符型 char
char表示字符 占用两个字节
java中的所有的字符都使用的是Unicode编码 一个字符可以存储一个字母 可以存储一个汉字 还可以存储其他的字符
字符的表示形式:
public static void main(String[] args){
//字符的第一种表示形式 使用单引号引起来的
char c1 ='1';
char c2 = '中';
char c3 = 'a';
char c4 = '&';
//转义字符
char c5= '\t';//制表符
char c6='\r';//回车
char c7 = '\n';//换行
//常量表示 直接使用unicoide值进行表示
}
2.4 布尔类型 boolean
表示的是逻辑值 只有true和false 两个值
Boolean适用于逻辑运算,一般用于程序流程控制
Boolean只允许取值true和false,无null。与c语言不同,不可以用0和非0的整数代替false和true。
3 基本数据类型之间的转换
3.1自动转换
非赋值运算的转换规则:
byte/char/short -> int -> long -> float -> double
布尔类型不参与转换
下面来看一个小例子
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c =a+b;
}
上面代码在编译器中会报错,变量 a,b,c 都是 byte 型,编译器为什么会报错呢,那是因为在运算过程中出现了数据类型的自动转换,变量 a 和变量 b 都是先转换为 int 型,再参与运算,所以a+b的结果是一个 int 型的数据,不能赋给 byte 型的c。
-
byte、char、short 参与算数运算时都是先转换为 int 型,再参与运算。
-
在运算时,如果有大范围操作数也有小范围操作数,那么小范围操作数就要先转换为大范围操作数再参与运算。
- 如两数之一为double,则另一个操作数先被转化为double,再参与算术运算。
- 如两数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
- 如两数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
- 如两数均不为double、float或long,则两操作数先被转换为int,再参与运算。
赋值运算时,Java会自动扩宽类型,将小范围类型变量转换成大范围类型的变量。
3.2 强制转换
除了自动转换外,我们还可以进行强制转换,以便将大范围操作数赋值给小范围操作数。
public static void main(String[] args) {
byte a = 1;
byte b = 2;
//a+b是int类型
byte c =(byte) (a+b);//这样就不会报错了
}
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。
有的数据经过转型运算后,精度会丢失。