首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java对于表达式中的自动类型提升

1 表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。...例如: short s1 = 1; s1 = s1 + 1; s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误...2 类型提升规则: (1)byte、short和char类型的值都被提升为int类型; (2)如果有一个操作数是long类型,就将整个表达式提升为long类型; (3)如果有一个操作数是float...类型,就将整个表达式提升为float类型; (4)如果任何一个操作数为double类型,结果将为double类型。.../c中,c被自动提升为int类型,该表达式结果是int类型; //d*s中,s被自动提升为doubl类型,该表达式结果是double类型; //最后,float+int-double,结果会被提升为

89120

Java入门系列-05-数据类型和类型转换

money=33.6f; double length=55.07; } } 在使用单精度浮点数时需加上 f 作为后缀,这是因为任何小数都会被认为是 double 在日常使用中建议使用 double...int add=2;//增加的体重 double sum=weight+add; System.out.println(sum);//输出和 } } add 变量是一个整数类型,而 weight...是一个小数,两者在相加后转成了 double类型 这时发生的就是 隐式类型转换 隐式类型转换 就是自动类型转换,满足以下两个规则即可发生 如果一个操作数为double类型,则整个表达式可提升为double...to int 这是为什么呢?...根据前面学到的隐式类型转换,当表达式中有操作数为 double类型时,整个表达式提升为 double,必须进行显式强制类型转换。

58900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Java篇】数据类型与变量:窥见程序的天地万象

    在 C 语言中使用 ASCII 字符,而 Java 中使用 Unicode 字符集,一个字符占用两个字节,Unicode 可以表示更多的字符类型,包括中文。...boolean value = true; System.out.println(value + 1); // 代码编译会出现错误 错误示例: Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误...; // 正确的操作 说明: 当 int 与 long 进行运算时,int 会被提升为 long 类型,因为 long 类型的范围比 int 更大,所以结果会变为 long 类型。...(c); // 错误,编译不通过 结论: byte 和 byte 是相同类型,但会在运算时提升为 int 类型,因为 CPU 通常按 4 字节来处理。...= 20; byte c = (byte) (a + b); // 强制转换为 byte 类型 System.out.println(c); // 正确 结论说明: byte 和 byte 运算会被提升为

    7710

    萌新学习C++容易漏掉的知识点,看看你中招了没有(一)

    二.进入正题 1. float和double 萌新初学浮点数要注意: //float和double一个单精度浮点数,一个双精度浮点数,就不说了, float f = 4.0; //不要这样写,虽然你定义的是...float,但实际上默认还是double类型 float f_1= 4.0f //这是正确的写法,f是double类型,记得后要加 f //而double直接写数字就好了 //浮点数的最大值和最小值从来都不是...2.否则,如果有一个操作数的类型是double,则另一个操作数转换为double。 3.否则,如果有一个操作数的类型float,则另一个操作数转换为float。...5.在整形提升的情况下,如果两个操作数都是有符号或者无符号类型的,且其中一个操作数的级别比另一个低,则转换为最高级别的类型。...7.否则,如果有符号类型可以表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型。 8.否则,将两个操作数都转换为有符号类型的无符号版本。

    53710

    C++类型转换几种情况

    第一个错误好理解一点,31325远远超过了char的最大范围。 第二个错误明明x的值为66,为什么会出错呢?编译器不会管你x的值是多大,他只管x的类型是多大。...1.如果有一位操作数的类型是long double,则另一个操作数转换为long double。 2.否则,如果有一个操作数的类型是double,则另一个操作数转换为double。...3.否则,如果有一个操作数的类型float,则另一个操作数转换为float。 4.否则,说明操作数都是整形的,因此执行整形提升,什么是整形提升,下面有写。...5.在整形提升的情况下,如果两个操作数都是有符号或者无符号类型的,且其中一个操作数的级别比另一个低,则转换为最高级别的类型。...也可以手动取消这种自动,在这种情况下,C++将对char和short类型进行整形提升,将float转为double类型。 5.

    2.3K20

    【Java】数据类型与变量详解!!!

    或F; 单精度浮点型在及时初始化没有小数输出时,也会带有1位小数; 单精度浮点型的赋值时,小数点后有多个0,会使用科学计数法进行输出 若小数点尾数都为0,那么将舍去,至少保留1位小数 Float为float...System.out.println(Double.MAX_VALUE);//最大值:3.4028235E38 } 双精度浮点型的初始化赋值后面可加d或D也可不加; 双精度浮点型赋值时,小数点后有多个...int而不是byte System.out.println(c);//3 System.out.println(k);//3 short i=1;...int在进行计算,所以得出的几个类型是int而不是short System.out.println(p);//3 System.out.println(l);//3...} byte和short的同类型运算会将其类型都提升为int在进行计算 为什么byte和short类型的数据会先提升为int在计算,而其他不会呢?

    11410

    java中的常量与变量

    整数型    byte short int long     浮点型    float double     字符型    char     布尔型    boolean  简要提一下引用数据类型:字符串...取值范围与内存占用不相关,就比如说图中的long占用8个字节而单精度浮点数float只占用四个字节,但是float的取值范围却比long的取值范围大很多,这是因为float采用的是科学计数法计算省空间。...注意事项: 1.字符串不是基本类型,而是引用类型。 2.浮点型可能只是一个近似值,并非精确值。 3.数据范围与字节数不一定相关。...例如:float数据范围比long更加广泛,但是float是4字节,long是8字节。 4.浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。...2.byte/short/char这三种类型都可以发生数学运算,例如加法“+”.     3.byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算。

    1K20

    【Java】小于4个字节的数据类型在算术运算中的类型提升机制解析

    在算术运算中,所有的byte、short和char类型的操作数会被自动提升为int类型。这个过程是隐式的,也就是说,我们并不需要手动进行类型转换。Java虚拟机(JVM)会在执行时自动完成这一转换。...为什么a + b的结果是int类型? Java的算术运算规则规定,当两个byte(或short、char)类型的变量进行算术运算时,它们会被自动提升为int类型,然后再进行运算。...即使操作数的类型是byte,运算时,它们会被提升为int类型。 因此,在执行a + b时,a和b首先会被转换为int类型,然后进行加法运算,最终结果为int类型。...虽然这样解决了编译错误,但我们需要小心,因为强制转换可能会导致数据溢出或精度损失。 底层机制:为何小于4字节的数据会被提升为4字节?...这一机制能够避免由于数据溢出或计算范围不足而引发的错误,但也可能导致类型不匹配的问题。我们需要通过强制类型转换来解决这个问题,将int类型的结果强制转换为byte类型。

    3300

    Java 大神的十个私藏避坑绝技

    , 导致存入的数据会出现误差,例: 0.1存入double就表示为0.1000000099999999, 因此不使用double类型的构造函数 思考: 当然对于精确要求不高的地方, 完全可以使用float...因此这也就解释了为什么byte到char的过程存在负号变正号....思考之后, 将可能得出这样的结论: 出现这样问题的原因是操作数的类型自动提升, char=>int. 但是又有一个问题就是为什么第一个运算不是88....此时C的类型就自动上升为式子中最高的类型, 例: false ? x : i, 输出是0, 而不是0对应的字符. 上面的规则决定了, 将调用哪一个print的重载函数....思考: 上面的问题说明了, 在条件表达式中, 最后再后两个操作数使用相同类型的操作数, 以此避免返回值类型不确定的问题, 并且在其他的表达式计算中, 一定要理清楚数值之间的类型转换. 8.发现隐藏的类型转换

    98920

    Julia(转换和推广)

    到处都是显式转换非常不方便,但是,即使Ada也具有一定程度的自动转换:整数文字会自动提升为所需的整数类型,而浮点文字也同样会提升为适当的浮点类型。...2×3 Array{Float64,2}: 1.0 2.0 3.0 4.0 5.0 6.0 转换并非总是可能的,在这种情况下,将引发任何方法错误,指示convert不知道如何执行请求的转换...某些语言认为将字符串解析为数字或将数字格式解析为要转换的字符串(许多动态语言甚至会自动为您执行转换),但是Julia却没有:即使某些字符串可以解析为数字,但大多数字符串都不是数字的有效表示形式数字,并且只有非常有限的一部分...上面的示例仅用于教学目的,而不是实际的Julia行为。...整数值被提升为本地机器字大小或最大整数参数类型中的较大者。整数和浮点值的混合被提升为足以容纳所有值的浮点类型。混合有理的整数被提升为有理。混有浮点数的有理数被提升为浮点数。

    1.6K40

    知识改变命运 第二集:Java的数据类型与变量

    4 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。...因此一个字符占用两个字节, 表示的字符种类更多, 包括中文. char ch = '呵'; System.out.println(ch); 执行 javac 的时候可能出现以下错误: Test.java...Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误 System.out.println(value + 1); 第一个类型: boolean 第二个类型: int 1 个错误 Java...f = 3.14F; double d = 5.12; d = f; // float-->double,数据范围由小到大,隐式转换 f = (float)d; // double-->float,...int与long之间:int会被提升为long int a = 10; long b = 20; int c = a + b; // 编译出错: a + b==》int + long--> long +

    10410

    【表达式求值】整型提升和算术转换

    (若类型 升为int或者unsigned int) 1.1整型提升的意义: 表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是...因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度(即4字节)。...通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。...所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。 实例1: char a,b,c; ......//操作类型若不同,采用从下至上的 小类型—>大类型: long double double float unsigned long int long int unsigned int

    14910

    第十四届蓝桥杯集训——JavaC组第三篇——常量与变量(八种基本数据类型)

    )换言之,常量,在计算机技术方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。...float:float属于实数类型,在存储的时候,用4个字节来存储,范围为32位IEEEE 754单精度范围,在变量初始化的时候,float的默认值为0.0f或0.0F,在初始化的时候可以写0.0。...关于类型的自动提升,遵循下边的规则:   所有的byte、short、char类型的值将提升为int类型;   如果有一个操作数是long类型,计算结果是long类型;   如果有一个操作数是float...类型,计算结果是float类型; 如果有一个操作数是double类型,计算结果是double类型;   自动类型转换图如下:   byte->short(char)->int->long->float...,避免使用float和double,float和double在货币运算中尤其不合适,要让float和double精确表达0.1也是不可能的事。

    35330
    领券