Java 数据类型转换

2020-04-11  本文已影响0人  向祥祥

1.概述

Java程序中要求参与计算的数据,必须保证数据类型的一致性,如果不一致将发生类型转换。

2.自动转换

一个int类型变量和一个byte类型变量进行加法运算:

int a=1;
byte b=2;

运算结果将是int类型,这就是数据类型自动转换的现象。
自动(隐式)转换特点:
①将取值范围小的类型自动提升为取值范围大的类型;
②代码不需要进行特殊处理,自动完成。

public static void main(String[] args) {
    int a=1;
    byte b=2;
    //byte c=b+a;//报错
    //int类型和byte类型运算,结果是int类型
    int d=b+a;
    System.out.println(d);
}

3. 强制转换

将1.5赋值到int类型变量会发生什么?产生编译失败,无法赋值。

int a=1.5;//报错

double类型内存8个字节,int类型内存4个字节。1.5是double类型,取值范围大于int。可以理解为double是8升的水壶,int是4升的水壶,不能把大水壶中的水直接放进小水壶中。
只有通过强制类型转换,将double类型强制换成int类型才能赋值。
强制(显式)转换特点:
①将取值范围大的数据类型转换成取值范围小的数据类型;
②代码需要特殊处理,需要手动执行。
转换格式:
数据类型 变量名 = (数据类型) 被转换数据值;
将1.5赋值到int类型,代码修改为:

//double类型数据强制转换成int类型,直接去掉小数点。
int i = (int)1.5;

同理,一个short类型和1相加,若要将值赋值给short类型的变量,需要强制转换。

short a=2;
short b = (short) a+1;

注意事项:
①强制类型转换一般不推荐使用,可能发生精度损失、数据溢出;
数据溢出:

int a = (int) 6000000000L;//long强制转换成为int类型
System.out.println(a);//输出1705032704,数据溢出

精度损失:

int b = (int) 3.5;//double==>int,强制类型转换
System.out.println(b);//输出3,不是四舍五入,所有的小数位都会被舍弃。

②byte/short/char三种数据类型都能发生数学运算

char char1=’A’;//字符变量
System.out.println(char1+1);//输出66,大写字母A被当成65处理。

③ byte/short/char三种数据类型都能发生数学运算,在运算时,都会首先被提升为int类型,然后计算,计算结果为int数据类型

byte a = 10;
byte b = 20;
byte result = a + b;//编译报错,会提升成int数据类型计算,计算结果为int数据类型。
System.out.println(result);

④boolean类型不能发生数据类型转换。

上一篇下一篇

猜你喜欢

热点阅读