类型转换与运算 | 您所在的位置:网站首页 › 强制类型转换运算符怎么使用java › 类型转换与运算 |
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验 Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。 1)自动类型转换(隐式) 在Java中,自动类型转换的规则如下: 将小的数据类型自动转换为大的数据类型。如果两个操作数其中一个是 double 类型,另一个操作数就会转换为 double 类型。如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。如果其中一个操作数是 long 类型,另一个操作数将会转换为 long 类型。否则,两个操作数都将转换为 int 类型。 int intValue = 10; double doubleValue = intValue; // 自动类型转换,将int转换为double float floatValue = 5.5f; double result = floatValue * doubleValue; // floatValue自动转换为double再相乘 long longValue = 10000000000L; double doubleResult = longValue * doubleValue; // longValue自动转换为double再相乘(2)强制类型转换 (显式) 在Java中,如果需要将一个数据范围大的类型转换为数据范围小的类型,就需要使用强制类型转换(显式类型转换)。强制类型转换需要使用括号将目标类型括起来,并将需要转换的值放在括号内。但需要注意,强制类型转换可能会导致数据丢失或溢出,因此应谨慎使用。 注意事项: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失 强制类型转换不一定能成功,不相干的类型不能互相转换 5,类型提升 不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。 (1)int与long之间:int 会被 提升为 long 当int类型和long类型进行运算时,int类型会提升为long类型,故所得的值也是long类型 (2)byte 与 byte的运算 byte类型的变量在进行运算时,编译器会先将其提升成int类型再进行运算,所以得到的结果也是int 类型提升小结: 不同类型的数据混合运算,范围小的会提升为范围大的对于short、byte这类小于4字节的类型,在运算前编译器会先将其提升至int类型后再进行计算引用数据类型: 所谓引用数据类型,即是实质内容存储在对象中,该变量实际存储的是对象的地址。 1,字符串类型 在Java中使用String类定义字符串类型,比如: 在某些情况下,需要将字符串和整形数字之间进行转换: (1)int 转成 String (2)String 转成 int 3,运算符 1,算术运算符 算数运算符分为三种,如下: 基本四则运算符:加减乘除模(+ - * / %)注意: (1)整型/整型,结果还是整型,会自动舍弃小数位(与C语言一致)。如下: 移位运算符有三个: > >>> ,都是二元运算符,且都是按照二进制比特位来运算的。 左移 :最左侧位舍弃,最右侧位补0 注意:左移时丢弃的是符号位,因此正数左移可能会变成负数 右移 >> :最右侧位舍弃,最左侧补符号位(正数补0,负数补1) 无符号右移 >>> :最右侧位舍弃,最左侧位补0,不考虑正负数。 注意: 1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方 2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方 3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替 4. 移动负数位或者移位位数过大都没有意义 (若想结果为带小数,需要两个操作数中至少有一个操作数是浮点数类型) (2)做除法和取模时,右操作数不能为0 (3)在Java中,不仅可以对整型取模,也可以对double取模,但是没有意义 (4)两侧操作数类型不一致时,向类型大的提升 增量运算符:加等,减等,除等,乘等,模等..(+=,-=,/=,*=,%= ..)在java语言中,加等运算符会自动进行类型转换,如下: 注意: (1)在Java语言中,对一个n=n++赋值后,会取赋值时的值 后置++,先使用再++ 2,关系运算符 关系运算符与C语言一致,主要有==, !=, , =,其计算结果为true或者false。 需要注意的是,当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的。 3,逻辑运算符 逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。 && 与 || 两个逻辑运算符都遵守短路求值的规则。 但是,在Java语言中,& | 在布尔表达式中,也可以充当逻辑运算符,与&& || 不同的是,其不支持短路求值,示例如下: 4,位运算符 位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。 Java中的按位运算符与C语言中同理,下面简要概述: 按位与 & :有0为0,全1为1 按位或 | : 有1为1,全0为0 注意: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算 按位取反~ :如果该位为 0 则转为 1, 如果该位为 1 则转为 0 按位异或^ :相同为0,不同为1 5,移位运算符 6,条件运算符 条件运算符只有一个,简称为三目运算符,如下: 表达式1?表达式2:表达式3 当表达式1的值为true时,整个表达式的值为表达式2的值 当表达式1的值为false时,整个表达式的值为表达式3的值 注意: 表达式2和表达式3的结果要是同类型的,除非能发生隐式类型转换表达式不能单独存在,其产生的结果必须要被使用三目运算符示例: 7,运算符的优先级 运算符是有优先级的,但是具体的规则不必记忆,我们只需要在有歧义的语句中加上小括号即可。 |
CopyRight 2018-2019 实验室设备网 版权所有 |