Java语言基础(4)——操作符以及相关的自动类型转换
首先介绍一元算术操作符,一元算术操作符包括:+,-,++和–。
一元算术操作符能够将byte/short/char类型的操作数自动提升为int型,位操作符~也具有类似的类型转换效果。
以下是一个示例:
public class UnaryConversion{
public static void main(String[] args){
byte b = 2;
char c = '\u1234';
System.out.println((-b) + ";" + (+c));//自动类型转换
int i = b; //byte转换为int
System.out.println(Integer.toHexString(i));
}
}
输出的结果为:
Integer.toHexString(i)的作用是将十进制整数i转换成十六进制
二元算数运算中的自动转换:
if (double,)或(,double),then * → double//优先考虑double,其次是float和long、int
else if (float,)或(,float),then * → float
else if (long,)或(,long),then * → long
else (,) → (int,int)
关于二元运算操作符的注意事项:
(1)即使两个操作数全是byte型或short型,运算结果也是int型
(2)整型之间的/运算和%运算中除数为0时会产生异常
(3)%的操作数可以为浮点数:9.5%3=0.5
(4)只有当被除数为负数时,余数才是负数:-7%3=-1, 20%-13=7
(5)+运算可以连接字符串
关系操作符:计算操作数之间的关系并得到boolean结果
注意:数值型的关系操作符遵循与二元算术操作符相同的自动类型转换规则
&, | 称为不短路与、或
&&,|| 称为短路与、或
关于“短路”的定义:
在逻辑表达式计算过程中, 一旦部分运算结果能够确定整个表达式的值, 则不再计算表达式的余下部分
示例:
public class ShortCircuit {
static boolean bLessThan1(int n) {
System.out.println(“(n<1)? ” + (n < 1));
return (n < 1);
}
static boolean bLessThan2(int n) {
System.out.println(“(n<2)? ” + (n < 2));
return (n < 2);
}
public static void main(String[] args) {
System.out.println(“Short Circuit:”);
System.out.println( bLessThan1(1) && bLessThan2(1) );//确定前一部分的结果后即可确认整个表达式的结果,所以后一部分不再计算
System.out.println(“Not Short Circuit:”);
System.out.println( bLessThan1(1) & bLessThan2(1) );//两个部分都计算
}
}
运行结果:
赋值操作符及赋值中的类型转换:
如果赋值a=b中, a的类型为A, b的类型为B, 则该赋值合法的前提是在下图中能够找到一条从B到A的路径:
虚箭头表示有可能损失精度
强制类型转换:
(1)将较大范围类型的操作数值转换为较小范围类型的操作数值时,需要强制类型转换;
(2)一般形式:(type) expression,例:(float)x/2
(3)对强制类型转换的限制:
整型与浮点型可以相互转换;
基本类型和数组、对象等引用类型之间不能互相转换;
布尔型与整型之间不能互相转换;
布尔型与浮点型之间不能互相转换;
(4)截尾和舍入:由float/double类型向int/long类型强制转换时,执行截尾操作;要得到舍入结果,需使java.lang.Math的round()方法。例:
public class CastRoundingNum {
public static void main(String[] args) {
double above = 0.7;
double below = 0.4;
float fabove = 0.7f;
float fbelow = 0.4f;
System.out.println(“(int)above: ” + (int) above);
System.out.println(“(int)below: ” + (int) below);
System.out.println(“(int)fabove: ” + (int) fabove);
System.out.println(“(int)fbelow: ” + (int) fbelow);
System.out.println(“Math.round(above): ” + Math.round(above));
System.out.println(“Math.round(below): ” + Math.round(below));
System.out.println(“Math.round(fabove): ” + Math.round(fabove));
System.out.println(“Math.round(fbelow): ” + Math.round(fbelow));
}
}
运行结果:
本文地址:https://blog.csdn.net/m0_46977476/article/details/110092939