“3.12 三元操作符if-else”讲了三元操作符的使用,三元操作符也称为条件操作符,他有三个操作数,最终会生成一个值,类似于我们再下一章控制流程中的if-else语句。三元操作符的表达式采取一下形式:
boolean-exp ? value0 : value1
如果boolean-exp的结果为true,就计算value0,否则就计算value1,举个具体的例子看看用法。
importstaticnet.mindview.util.Print.*; publicclassTernaryIfElse { staticintternary(inti) { returni<10?i*100 : i*10; } staticintstandardIfElse(inti) { if(i<10) returni*100; elsereturni*10; } publicstaticvoidmain(String[] args) { print(ternary(9)); print(ternary(10)); print(standardIfElse(9)); print(standardIfElse(10)); } }
/* Output:
900
100
900
100
*//
上面例子给出了三元操作符和if-else条件语句的用法对比,除了写法上,效果是一样的。
“3.13 字符串操作符+和+=”这一小节讲的内容前面也提到了,就是+在字符串上的使用,而且+=也提到过是先+再赋值。书中提到了操作符重载,这在c/c++中接触过,在这里先忽略这个概念。书中举的例子也不多做介绍,再次用自己的一个小例子说明一下:
String s = “a”;
s+=”b”;
print(s)
Output:ab
上面的例子就是说明+=操作符在字符串中的使用效果。
“3.14 使用操作符时常犯的错误”主要讲了==漏写了一个=变成了一个=的场景,这样的错误有时候不会导致程序出问题,但是会影响程序的运行结果。
“3.15 类型转换操作符”主要讲的是类型的强制转换,比如:
int i = 200;
long lng = (long)i;
通过括号可以实现类型的强制转换。Java允许我们把任何基本数据类型转换成其他的基本数据类型。类型转换操作包含两种转换,一种是窄化转换,一种是扩展转换。这里的窄化和扩展是针对类型所占字节数。比如上述int转long,相当于从4个字节转到8个字节,这种情况通常是安全的,这就是扩展转换;如果反过来将long转成int,就会导致位数不够,这就是窄化,通常这是比较危险的一件事情,但是编译器允许这种行为,就是需要我们程序员心里有数。
将一个浮点数强制转换成整数,Java通常的做法是去掉小数部分,例如:
importstaticnet.mindview.util.Print.*; publicclassCastingNumbers { publicstaticvoidmain(String[] args) { doubleabove=0.7, below=0.4; floatfabove=0.7f, fbelow=0.4f; print("(int)above: "+ (int)above); print("(int)below: "+ (int)below); print("(int)fabove: "+ (int)fabove); print("(int)fbelow: "+ (int)fbelow); } }
/* Output:
(int)above: 0
(int)below: 0
(int)fabove: 0
(int)fbelow: 0
*///:~
如果你期望的结果是四舍五入的话,就需要使用Java中的数学函数Math.round():
importstaticnet.mindview.util.Print.*; publicclassRoundingNumbers { publicstaticvoidmain(String[] args) { doubleabove=0.7, below=0.4; floatfabove=0.7f, fbelow=0.4f; print("Math.round(above): "+Math.round(above)); print("Math.round(below): "+Math.round(below)); print("Math.round(fabove): "+Math.round(fabove)); print("Math.round(fbelow): "+Math.round(fbelow)); } }
/* Output:
Math.round(above): 1
Math.round(below): 0
Math.round(fabove): 1
Math.round(fbelow): 0
*///:~
如果对基本类型执行算术运算或按位运算,只要类型比int小的(char,byte或者short),那么在运算之前,这些值会自动转换成int,最终结果也是int型的。通常参与运算的多个数,最终结果是以最大的数据类型决定的。比如float和double相乘,结果是double;int和long相加最终结果是long。