java数据类型和类型转换(必须清楚)

版权声明:本文为博主原创文章,转载附上地址就可以啦,多交流,一起进步。 https://blog.csdn.net/weixin_30363263/article/details/83447112

数据类型分类:

主要分为 基本类型、引用类型两大类;

基本类型 转换原则 

类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生。

 另外还有是直接数的赋值:先通过直接数判断其类型,然后基本原则和上面谈到的赋值原则基本一致;只是直接数是整数时特殊一点,当在可表示范围内时,可以直接赋值给 byte short char三种类型;

算术运算 中的类型转换:

 基本就是先转换为高位数据类型,再参加运算,结果也是最高位的数据类型;

图中有6个实心箭头,表示无信息丢失的转换;有3个虚箭头,表示可能有精度损失的转换。

 
例如,123456789是一个大整数,它所包含的位数比float类型所能表达的位数多。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。 
如果两个操作数(n,f)进行二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算。

  • 如果两个操作数中有一个是double类型,别一个操作数就会转换为double类型。
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
  • 否则,两个操作数都将被转换为int类型。

强制类型转换

在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也需要将double转换为int。在Java中,允许进行这种数值之间的类型转换。 
当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作。强制类型转换的语法格式是在圆括号给出想要转换的目标类型,后面紧跟着待转换的变量名。例如:

double x = 9.997;
int nx = (int) x;

这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整形。 
如果想对浮点数进行舍入运算,以便得到最接近的整数,那就需要使用Math.round方法:

double x = 9.997;
int nx = (int)Math.round(x)

现在,变量nx的值为10。当调用round的时候,仍然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能将long类型转换成int类型

特殊: 

(1)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。

  (2)  当运算符为自动递增运算符(++)或自动递减运算符(--)时,如果操作数为byte,short或char类型不发生改变;

三、引用类型 转换原则

 1、基本类型 与 对应包装类 可自动转换,这是自动装箱和折箱的原理;    

        Integer c1 = new Integer(1);
        Integer c2 = 2;
        int cc = new Integer(3);

        //另:String 与 基本类型的互转
        int i = Integer.parseInt("13");
        int ii = Integer.valueOf("12");

        String s1 = String.valueOf(123);
        String s2 = Integer.toString(i);
        String s3 = "" + i;

 2、两个引用类型间转换:

  • 子类能直接转换为父类 或 接口类型;
  • 父类转换为子类要 强制类型转换;且在运行时若实际不是对应的对象,会抛出ClassCastException运行时异常;

猜你喜欢

转载自blog.csdn.net/weixin_30363263/article/details/83447112
今日推荐