雷郭Java
1.区分数据类型的原因
- Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,
- 每一种数据类型在内存中分配了不同大小的内存空间
- 这样做是为了充分高效的利用内存空间
2.Java常见数据类型
- 基本数据类型
- 引用数据类型
2.1 基本数据类型
基本数据类型分为四类八种:
2.1.1 整数类型
package FirstPackage;
public class BasicType {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a=127;
System.out.println(a);
short ab=32767;
System.out.println(ab);
//byte b=128;//cannot convert from int to byte
//int c=1000000330222222222222;//the literal 1000000330222222222222 of type int is out of range
//int d=100L;//cannot convert from long to int
long e=100;
long f=100L;
}
}
- c:变量有自己的表示范围
- d,e:等式右边默认是int类型(byte,short除外)
- d,e:小类型可以转换成大类型,但是反过来不行
- e,f:为什么定义长整型L数据时要加L
以long f=100L为例,变量f是long类型的,它保存在栈中,而100L是long类型的,它保存在堆中,占用8个字节;
以long e=100为例,变量e是long类型的,它保存在栈中,而100是int类型的,它保存在堆中,占用4个字节;
还是不能解释为什么要加L!
2.1.2 浮点类型
package FirstPackage;
public class BasicType {
public static void main(String[] args) {
// TODO Auto-generated method stub
//float aa=1.222;//cannot convert from double to float
//System.out.println(aa);
float bb=1.2223333333333333332f;
System.out.println(bb);
double cc=1.2223333333333333332;
System.out.println(cc);
}
}
结果展示:
1.2223333
1.2223333333333333
- 浮点数等式右边默认double
- float的小数点数为7位,double小数点数为16位,我猜的
3.原码,反码,补码
规矩:(死记硬背就行!)
正数:原码,反码,补码都是一致的
负数:原码符号位不变,其他位取反得到反码,反码再加一得到补码
举例:
正数7:
原码:0000 0111
反码:0000 0111
补码:0000 0111
正数127:
原码:0111 1111
反码:0111 1111
补码:0111 1111
计算机处理数据时用的是补码!!
这很关键!
所以:
0000 0111
+
0111 1111
= 1000 0110
此时是补码,是计算机喜欢的格式
而人喜欢的是原码(直观)
所以我们转换一下看看到底是什么值
首先由符号位可知(由规矩反推)这是个负数:
此时就多了两个步骤
补码到反码:减一
1000 0110减1
得:
1000 0101
反码转原码:符号位不变,其他位反转
1111 1010
对应于十进制的数:-(127-5)= - 122
可以将-128到127看成一个循环,即超过127的byte从-128再出发
比如128就是-128,以此类推
4.数据类型转换
package FirstPackage;
public class Transfer {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a=3;
int b=9;
b=a+b;
System.out.println(b);
//a=a+b;//cannot convert from int to byte
//a=byte(a+b);//cannot convert from int to byte
a=(byte)(a+b);
System.out.println(a);
byte c=127;
int d=7;
c=(byte)(c+d);
System.out.println(c);
}
}
输出:
12
15
-122
- 小类型可以隐式转大类型(隐式转换)
- 大类型必须显式转小类型(强制转换)
- 注意强制转换类型本身也要加小括号如(byte)
5.float和long谁的表示范围大
6.浮点数的存储
感觉5和6还需要细看!!5可以作为6的补充!!