《Java编程思想第4版[中文版](PDF格式)》第53章


void floatTest(float x; float y) {
// Arithmetic operators:
x = x * y;
x = x / y;
x = x % y;
x = x + y;
x = x y;
x++;
x……;
x = +y;
x = …y;
// Relational and logical:
f(x 》 y);
f(x 》= y);
f(x 《 y);
f(x 1;
//! x = x 》》》 1;
81 
…………………………………………………………Page 83……………………………………………………………
// pound assignment:
x += y;
x …= y;
x *= y;
x /= y;
x %= y;
//! x = 1;
//! x 》》》= 1;
//! x &= y;
//! x ^= y;
//! x |= y;
// Casting:
//! boolean b = (boolean)x;
char c = (char)x;
byte B = (byte)x;
short s = (short)x;
int i = (int)x;
long l = (long)x;
double d = (double)x;

void doubleTest(double x; double y) {
// Arithmetic operators:
x = x * y;
x = x / y;
x = x % y;
x = x + y;
x = x y;
x++;
x……;
x = +y;
x = …y;
// Relational and logical:
f(x 》 y);
f(x 》= y);
f(x 《 y);
f(x 1;
//! x = x 》》》 1;
// pound assignment:
x += y;
82 
…………………………………………………………Page 84……………………………………………………………
x …= y;
x *= y;
x /= y;
x %= y;
//! x = 1;
//! x 》》》= 1;
//! x &= y;
//! x ^= y;
//! x |= y;
// Casting:
//! boolean b = (boolean)x;
char c = (char)x;
byte B = (byte)x;
short s = (short)x;
int i = (int)x;
long l = (long)x;
float f = (float)x;

} ///:~
注意布尔值(boolean)的能力非常有限。我们只能为其赋予true 和false 值。而且可测试它为真还是为 
假,但不可为它们再添加布尔值,或进行其他其他任何类型运算。
在 char,byte 和 short 中,我们可看到算术运算符的“转型”效果。对这些类型的任何一个进行算术运算, 
都会获得一个 int 结果。必须将其明确“造型”回原来的类型(缩小转换会造成信息的丢失),以便将值赋 
回那个类型。但对于int值,却不必进行造型处理,因为所有数据都已经属于 int类型。然而,不要放松警 
惕,认为一切事情都是安全的。如果对两个足够大的 int 值执行乘法运算,结果值就会溢出。下面这个例子 
向大家展示了这一点:
//: Overflow。java
// Surprise! Java lets you overflow。
public class Overflow {
public static void main(String'' args) {
int big = 0x7fffffff; // max int value
prt(〃big = 〃 + big);
int bigger = big * 4;
prt(〃bigger = 〃 + bigger);

static void prt(String s) {
System。out。println(s);

} ///:~
输出结果如下:
big = 2147483647
bigger = …4
而且不会从编译器那里收到出错提示,运行时也不会出现异常反应。爪哇咖啡(Java )确实是很好的东西, 
但却没有“那么”好!
对于 char,byte 或者 short,混合赋值并不需要造型。即使它们执行转型操作,也会获得与直接算术运算相 
同的结果。而在另一方面,将造型略去可使代码显得更加简练。
83 
…………………………………………………………Page 85……………………………………………………………
大家可以看到,除boolean 以外,任何一种主类型都可通过造型变为其他主类型。同样地,当造型成一种较 
小的类型时,必须留意“缩小转换”的后果。否则会在造型过程中不知不觉地丢失信息。
3。2 执行控制
Java 使用了 C 的全部控制语句,所以假期您以前用C 或 C++编程,其中大多数都应是非常熟悉的。大多数程 
序化的编程语言都提供了某种形式的控制语句,这在语言间通常是共通的。在Java 里,涉及的关键字包括 
if…else、while、do…while、for 以及一个名为switch 的选择语句。然而,Java 并不支持非常有害的goto 
(它仍是解决某些特殊问题的权宜之计)。仍然可以进行象goto 那样的跳转,但比典型的 goto 要局限多 
了。
3。2。1 真和假
所有条件语句都利用条件表达式的真或假来决定执行流程。条件表达式的一个例子是 A==B 。它用条件运算符 
“==”来判断A 值是否等于 B 值。该表达式返回 true 或 false。本章早些时候接触到的所有关系运算符都可 
拿来构造一个条件语句。注意 Java 不允许我们将一个数字作为布尔值使用,即使它在 C 和 C++里是允许的 
(真是非零,而假是零)。若想在一次布尔测试中使用一个非布尔值——比如在if(a)里,那么首先必须用 
一个条件表达式将其转换成一个布尔值,例如 if(a!=0)。
3。2。2 ifelse
if…else 语句或许是控制程序流程最基本的形式。其中的 else 是可选的,所以可按下述两种形式来使用 if:
if(布尔表达式)
语句
或者
if(布尔表达式)
语句
else
语句
条件必须产生一个布尔结果。“语句”要么是用分号结尾的一个简单语句,要么是一个复合语句——封闭在 
括号内的一组简单语句。在本书任何地方,只要提及“语句”这个词,就有可能包括简单或复合语句。
作为 if…else 的一个例子,下面这个 test()方法可告诉我们猜测的一个数字位于目标数字之上、之下还是相 
等:
static int test(int testval) {
int result = 0;
if(testval 》 target)
result = …1;
else if(testval 《 target)
result = +1;
else
result = 0; // match
return result;

最好将流程控制语句缩进排列,使读者能方便地看出起点与终点。
1。 return
return 关键字有两方面的用途:指定一个方法返回什么值(假设它没有 void 返回值),并立即返回那个 
值。可据此改写上面的 test()方法,使其利用这些特?
小说推荐
返回首页返回目录