美文网首页
Java类型转换

Java类型转换

作者: 夜阑w | 来源:发表于2019-02-18 12:29 被阅读0次

    一、值类型与引用类型

    值类型:

    在Java中,值类型表示的是这种数据类型的值代表数据本身。八种基本数据类型就是值类型,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面。

    引用类型:

    引用类型是通过class来定义的类型,除了八种数据类型之外的所有类型都是引用类型。引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值是存储在内存堆上的。

    传递

    • 值传递:基本数据类型的赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的备份,值传递后,实参传递给形参的值,形参发生改变不影响实参。
    • 引用传递:引用传递传递的是地址,形参改变会改变实参变量的值。

    二、自动类型转换

    1、基本数据类型

    从低位类型到高位类型可以自动转换,从高位类型到低位类型需要强制类型转换,另外,目标类型需能与源类型兼容。

    • 布尔型和其它基本数据类型之间不能相互转换;
    • char可转换为int、long、float和double,其他类型不能转换为char;
    • 其他六种类型从低到高的排序为:byte、short、int、long、float、double;
    • 算术运算中,基本会先转换为高位数据类型,再参加运算,结果也是最高位的数据类型。
    public class Test {
        public static void main(String[] args) {
            int price = 3;
            double finalPrice = price;
            System.out.println(finalPrice);
            System.out.println(price+finalPrice);
            /*输出结果:
            3.0
            6.0*/
        }
    }
    

    特殊情况:

    • 如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。
    • 当运算符为自动递增运算符(++)或自动递减运算符(--)时,如果操作数为byte,short或char,类型不发生改变;

    2、引用类型

    • 基本类型与对应包装类可自动转换,这是自动装箱和拆箱的原理。
    • 子类能直接转换为父类或接口类型: 子类就是父类。
    Animal cat = new Cat();
    
    • 父类转换为子类要强制类型转换;且在运行时若实际不是对应的对象,会抛出ClassCastException运行时异常。

    三、强制类型转换

    1、基本数据类型

    语法:( 数据类型 ) 数值

    public class Test {
        public static void main(String[] args) {
            double finalPrice = 3.25;
            int price = (int)finalPrice;
            System.out.println(price);
            //输出结果:3
            //损失了部分数据
        }
    }
    

    2、引用类型

    语法与上述相同,需要注意若转换后在运行时实际不是对应的对象,会抛出ClassCastException运行时异常。

    Animal animal = new Cat();
    Cat cat = (Cat)animal;
    

    相关文章

      网友评论

          本文标题:Java类型转换

          本文链接:https://www.haomeiwen.com/subject/qnxaeqtx.html