0
点赞
收藏
分享

微信扫一扫

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)

1、Java数据分类

总的来讲,java这个语言里只有两种数据类型:基本数据类型、引用数据类型。

具体的用图表达会更清晰:

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_数据类型

注意一点,只有引用数据类型才会有NPE问题。

2、数据范围

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_数据类型_02

int和byte需要记住,其余可以不用记(有人说都该记下来,这个不抬杠,你要是有精力都背下来当然是好的,但一个东西要是你花了很大功夫只是暂时能记住,一段时间不碰又忘了,那这个东西往往是不用背的,用得时候查找一下比花很大精力换得的临时记忆更划算更高效)

  • int类型可以表示的范围,-2147483678到2147483647
  • byte是-128到127

3、数据类型选择

定义变量时,如何选择数据类型,有个原则(但不绝对):

  1. 数字首选int和double
  2. 数据传输或者进行文字编码转换使用byte
  3. 处理中文char
  4. 描述内存或文件大小,描述主键列(自动增长)使用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进制转二进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_最小值_03

所以52对应的二进制数就是110100(实际应该是0011 0100)

(2)负整数10进制转二进制

要点:取反加一

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_十六进制_04

(3)小数转二进制

要点:乘二取整,正序排列

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_十六进制_05

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_数据类型_06

(4)二进制小数转十进制
JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_最小值_07

(5)二进制转八进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_数据类型_08

(6)八进制转二进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_十六进制_09

(7)二进制转十六进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_十六进制_10

(8)十六进制转二进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_最小值_11

(9)十进制转八进制或十六进制

也可以间接的,把十进制转换成二进制,再转换成其它进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_十六进制_12

(10)八进制或十六进制转十进制

JAVA基础(四)------ Java的数据类型(数据分类、数据范围、数据类型选择、数据溢出、类型互转、进制转换)_最小值_13


举报

相关推荐

0 条评论