Java基础——数据类型转换

数据类型转换

当数据类型不一样时,将会发生数据类型转换。

数据类型转换分为:

  1. 自动类型转换(隐式)
  2. 强制类型转换(显式)

自动类型转换

  1. 特点:代码不需要进行特殊处理,自动完成

  2. 规则:数据范围从小到大

  3. 格式:范围大的类型 范围大的变量名 = 原本范围小的数

public class Demo01{
    public static void main(String[] args){
        //格式:范围大的类型  范围大的变量名 = 原本范围小的数
        long num1=100;
            System.out.println(num1);
    }
}
  • 该代码中,100为整数,默认为int型,而左边为long型,左右类型不一样,但该代码无错误
  • 一个等号代表赋值,即将右边作为int型的100赋值到long型的num1变量进行存储
  • 从int型赋值到long型,int型的数值范围小于long型,符合了数值类型从小到大的要求
  • 所以这一行代码发生了自动类型转换
long num1=100;
System.out.println(num1);//可以得到num1为100

再如:

double num2=2.5F;//浮点数默认类型为double型,加上后缀F变成float型
System.out.println(num2);//double型数值范围大于float型,符合从小到大的规则,可以得到num2为2.5而不会报错

而不同数值型的转换:

float num3=42L;//42L将数值转换为long型,
System.out.println(num3);//float型数值范围大于long型(数值范围和字节数不一定相关),符合从小到大的原则,可以得到num3为42.0

强制类型转换

特点:代码需要进行特殊的格式处理,不能自动完成

格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据

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

  2. byte/short/char这三种类型都可以发生数学运算,例如加法“+”.

  3. byte/short/char这三种类型在运算的时候,都会被**首先提升成为int类型**,然后再计算。

  4. boolean类型(布尔类型)不能发生数据类型转换

public class Demo02{
    public static void main(String[] args){
        //格式:范围小的类型  范围小的变量名 = (范围小的类型)原本范围大的数据
        int num1=(int)100L;
        System.out.println(num1);
    }
}
  • 若还以自动类型转换的格式来写,即int num1=100L,但将long型转换为int型的过程中,不符合数值范围从小到大的要求,因此会报错。
  • 即在右边数值前加一个要转换的类型

再如:

float num2=(float)2.3;//浮点数默认类型为double型,将double强制转换为float型
System.out.println(num2);//可得num2=2.3

数据溢出例子:

int num3=(int)3000000000L;//int型数值范围约为21个亿,而右边数值有30个亿,为long型时是正常的,却超过了int型的数值范围
System.out,println(num3);//不能得到所需要的3000000000,数值将溢出

精度损失例子:

int num4=(int)3.9;//将double型强制转换为int型
System.out.println(num4);//得到num4=3,不是四舍五入,而是直接将所有小数为直接舍弃

数学运算例子1:

byte num5=20;
byte num6=30;
int num7=num5+num6;//因为num5和num6在运算前,会先被提升为int型,再进行运算,所以可以直接赋值到int型上;其次要注意右边两者的和不能超过左边数据类型的数值范围,否则会发生数据溢出
Ststem.out.println(num7);//可得num7=50

数学运算例子2:

short num8=20;
short num9=30;
short num10=(short)(num5+num6);//因为(num8+num9)的值为int型,所以要先强制转换为short型,才能赋值到short型的num10上;(num8+num9)若不加括号,则只有num8被强制转换,与其和无关。
System.out.println(num7);//可得num10=50

数学运算例子3:

short num11=(short)(num5+num8);//byte型+short型,过程中都会先转换成int型再相加,所以可行
System.out.println(num11);//可得num11=40

字符型运算例子:

char zifu1 = 'A'; // 这是一个字符型变量,里面是大写字母A
System.out.println(zifu1+1); //得 66,也就是大写字母A被当做65进行处理

其中字符 ’ A '可从ASCII编码表中找其代表数字,重点记忆:
在这里插入图片描述

其数值代表可以用所记忆的字符推得,如’B’=66,‘3’=51

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值