数据类型转换

基本数据类型之间的运算规则

前提:只是7中基本数据类型的运算,不包含boolean类型。

容量指的是表示数的范围大小,不是占用内存空间的大和小。

class VariableTest2{
    public static void main(String[] args){
        byte b1 = 2;
        int i1 = 129;
        
        byte b2 = b1+i1;
    }
}

 

 编译不通过超出byte的范围

 

 

class VariableTest2{
    public static void main(String[] args){
        byte b1 = 2;
        int i1 = 129;
        int i2 = b1+i1;
        System.out.println(i2);
    }
}

 

编译通过

 

 

class VariableTest2{
    public static void main(String[] args){
        byte b1 = 2;
        int i1 = 129;
        long l1 = b1+i1;
        float f1 = b1+i1;
        System.out.println(l1);
        System.out.println(f1);
    }
}

 

可以用比int大的接收,用浮点型接收会在整数后补个.0 

 

 

 

public class A1 {

    public static void main(String[] args) {
        char c1 = 'a';
        int i3 = 10;
        int i4 = c1 + i3;
        System.out.println(i4);
    }
}

char会把字母的ascii码值用来计算 

 说明char类型的数据和short类型数据做运算时,数据结果为int类型(因为从int转换到short可能会有损失) 

 说明char类型的数据和byte类型数据做运算时,数据结果为int类型(因为从int转换到byte可能会有损失)

 

 

说明byte类型的数据和short类型数据做运算时,数据结果为int类型(因为从int转换到short可能会有损失)

说明同类型之间做运算,数据结果类型为int类型(因为从int转换到short可能会有损失)

 结论:char、byte、short运算时结果为int类型,同类型相互做运算也是int类型。(原因Java在做运算的时候,操作数都在int范围内,一律在int空间内运算)


强制类型转换

 

 

 不能直接赋值

 使用强制类型转换

截断操作:只截取相应的位数。会损失精度

 

数值不超过强转类型的范围,这样才不会精度损失 

 精度损失

 

 

 也可以这样但是没必要


 

 

 两个特殊情况

 

整数常量默认为int类型,相当于自动类型提升

 

 编译失败:过大的整数。(整数常量默认为int类型)

 

 

 加上L之后才会被认为是一个long行的变量

 

 浮点型常量默认为double类型,因为double的容量比float大没有强制类型转换符(),所以会编译失败。

 

 这样写不好①麻烦②操作复杂

一开始会认为12.3是个double类型

 

 加上float再把前面的砍掉

如果加上f 

上来只有这么长 

 

 

 

整数常量默认为int类型

 

 浮点型常量默认为double类型

 

posted @ 2020-10-15 19:37  风萧萧路漫漫  阅读(133)  评论(0编辑  收藏  举报
// 改变博客标题
浏览器标题切换
浏览器标题切换end