JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)
1、Java数据分类
总的来讲,java这个语言里只有两种数据类型:基本数据类型、引用数据类型。
具体的用图表达会更清晰:
注意一点,只有引用数据类型才会有NPE问题。
2、数据范围
int和byte需要记住,其余可以不用记(有人说都该记下来,这个不抬杠,你要是有精力都背下来当然是好的,但一个东西要是你花了很大功夫只是暂时能记住,一段时间不碰又忘了,那这个东西往往是不用背的,用得时候查找一下比花很大精力换得的临时记忆更划算更高效)
- int类型可以表示的范围,-2147483678到2147483647
- byte是-128到127
3、数据类型选择
定义变量时,如何选择数据类型,有个原则(但不绝对):
- 数字首选int和double
- 数据传输或者进行文字编码转换使用byte
- 处理中文char
- 描述内存或文件大小,描述主键列(自动增长)使用long
4、数据溢出问题
忽略了每种数据类型的边界,当赋值超过范围时就会造成数据溢出,产生循环现象,代码如下。
public class WeboTest {
public static void main(String[] args) {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("int最大值:"+max);
System.out.println("int最小值:"+min);
System.out.println(max + 1);
System.out.println(max + 2);
System.out.println(min - 1);
}
}
结果如下:
int最大值:2147483647
int最小值:-2147483648
-2147483648
-2147483647
2147483647
超边界后就会产生循环,解决循环的方法有两个:一是定义变量时就把变量的数据类型扩大,二是将结果类型向上强转
第一种代码改写如下:
public class WeboTest {
public static void main(String[] args) {
long max = Integer.MAX_VALUE;
long min = Integer.MIN_VALUE;
System.out.println("int最大值:"+max);
System.out.println("int最小值:"+min);
System.out.println(max + 1);
System.out.println(max + 2);
System.out.println(min - 1);
}
}
结果如下:
int最大值:2147483647
int最小值:-2147483648
2147483648
2147483649
-2147483649
第二种代码改写如下:
public class WeboTest {
public static void main(String[] args) {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("int最大值:"+max);
System.out.println("int最小值:"+min);
System.out.println(max + 1L);
System.out.println(max + 2L);
System.out.println(min - 1L);
}
}
结果如下:
int最大值:2147483647
int最小值:-2147483648
2147483648
2147483649
-2147483649
虽然两种解决溢出的方法都能达到目的,但是不推荐第二个强转模式。
5、类型互转
首先有个总的说明:范围大的数据类型直接赋值给范围小的数据类型转换(向下转型)都会报错;任何小数都是默认为double类型;所有编程语言中字符类型都可与int类型相互转换。
(1)int 和 byte互转
Java对byte有特殊处理,没有超过byte范围(-128--127)的数字会自动由int转为byte
byte num = 20;这里的20为int类型,赋值给num为byte型
若超过范围byte num = 200;则编译都通不过。
(2)double和float互转
若double转float,需要强转,两种方式:
float i = (float)11.6;
float j = 11.6L;
需要注意L大写,增强可读性。
(3)char和int互转
根据ASSIC编码,int和char有一一对应的映射关系,其中char包含字母、数字、汉字等,需要记住常见的字符编码范围:
A----65
a----97
0----48
其中小写字母和其对应的大写字母相差32,即int(a)- int(A)== 32
5、进制转换
(1)正整数10进制转二进制
所以52对应的二进制数就是110100(实际应该是0011 0100)
(2)负整数10进制转二进制
要点:取反加一
(3)小数转二进制
要点:乘二取整,正序排列
(4)二进制小数转十进制
(5)二进制转八进制
(6)八进制转二进制
(7)二进制转十六进制
(8)十六进制转二进制
(9)十进制转八进制或十六进制
也可以间接的,把十进制转换成二进制,再转换成其它进制
(10)八进制或十六进制转十进制