关于Java运算中类型自动提升的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java运算中类型自动提升的问题相关的知识,希望对你有一定的参考价值。

1.表达式中的自动类型提升:

表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。

例如:short s1 = 1;

      s1 = s1 + 1;

s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short类型。

例如:short s1 = 1; 

      s1 += 1;

+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。

2.类型提升规则:

byte、short和char类型的值都被提升为int类型;

如果有一个操作数是long类型,就将整个表达式提升为long类型;

如果有一个操作数是float类型,就将整个表达式提升为float类型;

如果任何一个操作数为double类型,结果将为double类型。

例如:

byte b=1;

char c=‘a‘;

short s=1024;

int i=50;

float f=2.0f;

double d=.123;

double result = (f * b) + (i / c) - (d * s); 

f*b中,b被自动提升为float类型,该表达式结果是float类型;

i/c中,c被自动提升为int类型,该表达式结果是int类型;

d*s中,s被自动提升为doubl类型,该表达式结果是double类型;

最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。

3、测试一个int类型数据与float数据运算后,测试结果是什么类型

public class Test {
    public void test(float f) {
        System.out.println("float");
    }
 
    public void test(double d) {
        System.out.println("double");
    }
 
    public void test(int i) {
        System.out.println("int");
    }
 
    public static void main(String[] args) {
        Test t = new Test();
        int i = 10;
        float f = 10f;
        t.test(f * i);
    }
}

最后结果显示为float类型

 

以上是关于关于Java运算中类型自动提升的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java数值类型提升机制(三目条件运算符与空指针问题)

JAVA-初步认识-第二章-自动类型提升&强制类型转换

Java自动提升表达式的类型

Java基本数据类型的运算

为什么两个short类型相加会自动提升为int?

为什么两个short类型相加会自动提升为int?