美文网首页
自动转换和强制转换

自动转换和强制转换

作者: 竹鼠不要中暑 | 来源:发表于2019-02-16 14:40 被阅读1次

数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。

自动转换

布尔型和其它基本数据类型之间不能相互转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数1类型 操作数2类型 转换后的类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double
  • 在算数运算中,除了按上表的自动转换外,byte short char运算会转换为Int;

基本数据的类型在平时写代码中很常见了,比如调用方法时的参数传递。再举个小例子:

        double i = 1/3;
        double j = 1.0/3;
        System.out.println(i); // 0.0
        System.out.println(j); // 0.3333333333333333

这是因为,1/3两个操作数都为int,则运算结果也为int1整除3结果为00再转换为double则为0.0,因此i=0.0;而1.0/3,操作数一个为double,一个为int,运算结果为double,因此j= 0.3333333333333333

强制转换

自动转换是有规则的(从小到大),如果不想遵守这种规则,从大到小,从高到低,就需要强制换了。

  1. 条件是转换的数据类型必须是兼容的。
  2. 格式:(type)valuetype是要强制类型转换后的数据类型。
    举例:
        int a = 97;
        System.out.println((char) a); // a

字符a的十进制Unicode码为97.

引用类型转换

上面的自动转换和强制转换的规则对引用类型的转换也适用,从小到大,父类为大,子类为小。

  • 自动转换:向上类型转换,是小类型到大类型的转换,即把子类类型对象赋给父类类型变量;
  • 强制转换:向下类型转换,是大类型到小类型的转换,即把父类类型对象赋给子类类型变量。

其实就是一个很简单的道理,猫是动物(自动转换),动物却不一定是猫(不能自动转换)。

  • 举例:
public class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}
public class Cat extends Animal{
    public Cat(String name) {
        super(name);
    }
}
public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
}
  • 自动转换:
        Animal cat = new Cat("喵"); //自动转换 让动物变量cat为猫
        Cat cat1 = new Cat("喵喵"); 
        Animal cat2 = cat1; // 自动转换 让动物变量cat为猫
        System.out.println(cat.getName()); // 喵
        System.out.println(cat2.getName()); // 喵喵
  • 强制转换
        Cat cat = new Cat("喵");
        Animal cat1 = cat;
        Cat cat2 = (Cat) cat1;
        Dog dog = (Dog) cat1;
        System.out.println(cat2.getName()); // 喵
        System.out.println(dog.getName()); // Error:(10, 25) java: 不兼容的类型: Cat无法转换为Dog

上面说到,强制转换也是有条件的:转换的数据类型必须是兼容的,因此Cat无法转换为Dog。

另外,java也可以利用instanceof关键字判断是一个实例对象是否属于一个类,是返回true,否则返回false
语法:

实例 instanceof 类

要说明的一点是,强制类型因为是从大到小的转换,因此存在风险,可能会精度丢失或内存溢出。

相关文章

  • JavaScript数据类型转换

    本文主要介绍数据类型强制转换和自动转换,自动转换是基于强制转换之上。强制转换主要指使用>Number、String...

  • JS 里的数据类型转换

    数据类型的转换可分为强制转换和自动转换。 强制转换 强制转换主要指使用Number、String和Boolean三...

  • php的数据类型的转换和运算符

    主要分为两种,自动转换和强制类型转换,也就是显式转换和隐式转换,自动转换用的多 php中强制类型转换 在php中的...

  • 3.12 PHP数据类型之间的转换和检测

    数据类型的转换有2种方式,强制转换和自动转换。 强制转换: 用setType(变量,"类型");,它是用来将变量直...

  • 自动转换和强制转换

    数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从...

  • Java 数据类型的自动转换和强制转换

    Java 数据类型的自动转换和强制转换 自动转换 自动转换适用于低位数类型向高位数类型的转换 规则: 对于算术运算...

  • 2、强制数据类型转换

    数据类型转换: 在js中,数据类型的转换有两种,分别是自动转换和强制转换 自动转换: 自动转换是用JS进行某些操作...

  • java数据类型

    1、整型拓展 2、浮点数 3、类型转换 java强制类型转换和自动类型转换。自动类型转换是程序执行过程中自动进行转...

  • Java 学习笔记_2

    1、隐式转换 和 强制类型转换 隐式转换: 又叫自动类型转换。由系统自动完成的类型转换. 从存储范围小的类型到存储...

  • 数据类型的转换

    数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中 “ 悄然 ” 进行的转换,不需要用户提前声明,...

网友评论

      本文标题:自动转换和强制转换

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