本章主要讨论了Java语言的基本数据处理,包括变量与常数、各种数据类型、类型转换和运算符等。另外,如果可以灵活使用各种数据类型,再搭配简易的输出指令和运算符,就可以编写出许多实用的程序。
我们知道逻辑运算符运用于条件判断表达式来控制程序执行的流程,而一个条件判断表达式中可以使用多个逻辑运算符。不过,当连续使用逻辑运算符时,它的计算顺序为从左到右进行。以下程序中声明了a、b和c三个整数变量,并赋予了初值,请判断以下两个表达式结果的真假值(布尔类型的结果,true或者false):
a<b && b<c || c<a !(a<b) && b<c || c<a
【综合练习】多重逻辑运算符的应用与范例
01 // 多重逻辑运算符的应用与范例 02 public class WORK02_01 { 03 public static void main (String args[] ) { 04 int a=7,b=8,c=9; /*声明a、b和c三个整数变量,并赋初值*/ 05 System.out.println("a<b && b<c || c<a = "+(a<b && b<c || c<a)); 06 /* 先计算“a<b && b<c”,再将结果与“c<a”进行OR的运算 */ 07 System.out.println("!(a<b) && b<c || c<a = "+(!(a<b) && b<c || c<a)); 08 } 09 }
【程序的执行结果】
程序的执行结果可参考图2-18。
图2-18
请大家运用位逻辑运算符对两个整数12与7进行位与位之间的AND、OR、XOR位逻辑运算,并显示出运算结果。
【综合练习】位逻辑运算符的应用与范例
01 // 位逻辑运算符的应用与范例 02 public class WORK02_02 { 03 public static void main (String args[]) { 04 int bit_test=12;/* 声明整数变量并赋初值 (00001100) */ 05 int bit_test1=7;/* 声明整数变量并赋初值 (00000111)*/ 06 System.out.println("bit_test="+bit_test+" bit_test1= "+bit_test1); 07 System.out.println("-----------------------------------------"); 08 /* 执行 AND、OR、XOR 位逻辑运算 */ 09 System.out.println("执行 AND 运算的结果:"+(bit_test & bit_test1)); 10 System.out.println("执行 OR 运算的结果:"+(bit_test | bit_test1)); 11 System.out.println("执行 XOR 运算的结果:"+(bit_test ^ bit_test1)); 12 } 13 }
【程序的执行结果】
程序的执行结果可参考图2-19。
图2-19
我们知道强制类型转换可以用来弥补自动类型转换无法处理的情况。例如下面的情况:
int i=100, j=3; float Result; Result= i /j;
这时自动类型转换会将i/j的结果(整数值33)转换成float类型,再赋值给Result变量,得到33.000000,而i/j小数点后面的部分完全被舍弃了,因此无法得到精确的结果值。如果我们要获取小数部分的数值,请试着在上述程序代码中增加强制类型转换的功能。
除了由编译器自行转换的自动类型转换之外,Java语言还允许用户强制转换数据类型。例如,如果想让两个整数相除得到更精确的结果,那么可以用强制类型转换,即将两个整数转换成浮点数类型。要在表达式中强制转换数据类型,采用如下语法:
(强制转换类型名称) 表达式或变量;
例如以下程序片段:
int a,b,avg; avg=(float)(a+b)/2;/* 将a+b的结果值强制转换为浮点数类型 */
注意,上述程序语句中包含转换类型名称的小括号是绝对不可以省略的,否则计算结果得到的浮点数在被自动类型转换为整数时,小数部分会被直接舍弃。另外,在赋值运算符“=”左边的变量不能进行强制数据类型转换,例如:
(float)avg=(a+b)/2; /* 不合法的程序语句 */
【综合练习】强制类型转换练习
01 // 自动类型转换与强制类型转换的比较 02 public class WORK02_03 { 03 public static void main (String args[]) { 04 int i=100, j=3; /* 声明整数变量 i 与 j,并赋初值 */ 05 float Result; /* 声明浮点数变量 Result */ 06 System.out.println("自动类型转换的执行结果为:"); 07 Result=i/j; /* 自动类型转换 */ 08 System.out.println("Result=i/j="+i+"/"+j+"="+Result); 09 System.out.println("--------------------------------------"); 10 System.out.println("强制类型转换的执行结果为:"); 11 Result=(float) i / j; /* 强制类型转换 */ 12 System.out.println("Result=(float)i/(float)j="+i+"/"+j+"="+Result); 13 System.out.println("--------------------------------------"); 14 } 15 }
【程序的执行结果】
程序的执行结果可参考图2-20。
图2-20