重温经典《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。

目录
相关文章
|
2月前
|
Java 编译器
Java“操作符 ... 不能应用于 x”解决
当Java编译器报错“操作符 ... 不能应用于 x”时,通常是因为你尝试对不支持该操作符的数据类型执行了操作。解决方法包括:确保数据类型兼容、使用正确的类型转换或选择合适的方法。检查代码中的变量类型和操作符使用是否正确。
47 4
|
7月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
7月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
63 2
|
6月前
|
缓存 并行计算 Java
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
|
7月前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
7月前
|
设计模式 算法 Java
重温经典《Thinking in java》第四版之第九章 接口(四十七)
重温经典《Thinking in java》第四版之第九章 接口(四十七)
53 0
|
7月前
|
安全 Java 程序员
重温经典《Thinking in java》第四版之第八章 多态(四十五)
重温经典《Thinking in java》第四版之第八章 多态(四十五)
56 1
|
7月前
|
存储 设计模式 缓存
Java instanceof操作符:类型检查的必备工具
Java instanceof操作符:类型检查的必备工具
97 0
|
7月前
|
Java 编译器 C++
重温经典《Thinking in java》第四版之第九章 接口(四十六)
重温经典《Thinking in java》第四版之第九章 接口(四十六)
43 0
|
5天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
35 6