重温经典《Thinking in java》第四版之第三章 操作符(二十)

简介: 重温经典《Thinking in java》第四版之第三章 操作符(二十)

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。

目录
相关文章
|
5月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
5月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
52 2
|
4月前
|
缓存 并行计算 Java
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
|
5月前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
5月前
|
设计模式 算法 Java
重温经典《Thinking in java》第四版之第九章 接口(四十七)
重温经典《Thinking in java》第四版之第九章 接口(四十七)
43 0
|
5月前
|
安全 Java 程序员
重温经典《Thinking in java》第四版之第八章 多态(四十五)
重温经典《Thinking in java》第四版之第八章 多态(四十五)
47 1
|
5月前
|
存储 设计模式 缓存
Java instanceof操作符:类型检查的必备工具
Java instanceof操作符:类型检查的必备工具
76 0
|
5月前
|
Java 编译器 C++
重温经典《Thinking in java》第四版之第九章 接口(四十六)
重温经典《Thinking in java》第四版之第九章 接口(四十六)
37 0
|
Java
java基础之基本操作符的使用(下)
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。
118 0
java基础之基本操作符的使用(下)
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
下一篇
无影云桌面