运算符使用细节
1.double除法的细节
public static void main(String[] args){
double a = 10 / 4;
double b = 10.0 / 4;
System.out.println(a);
System.out.println(b);
}
整数相除只会保留整数(无论是变量还是常量都一样),然后再赋给double,因此a为2。10.0为double类型,double/int 或者 double/double 都会保留小数,因此b为2.5。
2.取余的本质
public static void main(String[] args){
int a = -10 % 3;
int b = 10 % -3;
System.out.println(a);
System.out.println(b);
}
取余的本质是一个公式—— a % b = a - a / b * b 。
3.前置++和后置++
用临时变量的规则进行解释。
前置++:先自增,再进行相关操作——对于 b = a++,(1) a = a + 1; (2) temp = a; (3) b = temp;
后置++:先进行相关操作,后自增——对于 b = a++,(1) temp = a; (2) a = a + 1; (3) b = temp;
public static void main(String[] args){
int a = 10;
int b = a++;//先把a赋给b,a再加一
int c = 10;
int d = ++c;//c先加一,再把c赋给d
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
}
int i = 1;
i = i++;
根据规则进行判断—— (1) temp = i; (2) i = i +1; (3) i = temp; 因此最终i仍然为1。
int i = 1;
i = ++i;
根据规则进行判断—— (1) i = i + 1; (2) temp = i; (3) i = temp; 因此最终i为2。
三元运算符里的++和--:
int a = 10;
int b = 99;
int result = a < b ? a++ : b--;
System.out.println("result=" + result);
System.out.println("a=" + a);
System.out.println("b=" + b);
a<b为真,返回a++,因为是后置++,因此返回a后,a再加一,对b不进行操作。
三元运算符
三元运算符是一个整体,在执行时会把所数据类型的精度上升到最大的那个(在常用类中的例子)
Object obj1 = true?new Integer(1):new Double(2.0);
System.out.println(obj1); //最大精度为double,输出1.0
Object obj1 = true?new Integer(1):new Integer(2);
System.out.println(obj1); // 最大精度为int,输出1