数值类型之间的转换
byte -> short -> int -> long
char -> int -> double
float -> double
以上为无信息丢失的转换
int -> float long -> float long -> double
以上为可能有精度损失的转换
例如 123 456 789 是一个大整数
它所包含的位数比float类型所能表达的位数要多
当这个整型数值转换成float类型时
将会得到同样大小的结果
但却失去了一定的精度
import static java.lang.Math.*;
public class Step4 {
// 枚举类型
// 自定义枚举类型
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};// 不能在本地进行枚举,要在主方法之外进行声明
public static void main(String[] args){
Size s = Size.LARGE;
System.out.println(s);
int n = 123456789;
float f = n;
System.out.println(f);// print 1.23456792E8
// 强制类型转换 (cast)
// 例如
double x = 9.97;
int nx = (int) x;
System.out.println(nx);// print 9
// 对浮点数进行舍入运算,以便获得最接近的整数
// 需要使用Math.round方法
double i = 9.997;
int ix = (int) round(i);
System.out.println(ix);// print 10
// 在调用round方法时,仍然需要使用强制类型转换
// 原因是round方法返回的时long类型
// 由于存在信息丢失的可能性,
// 所以只有使用显式的强制类型转换才能将long类型转换成int类型
int k = 11;
k++;
System.out.println(k);
// 前缀形式 ++k
// 后缀形式 k++
// 在表达式中,两者略有区别
// 前缀形式会先完成加1,而后缀形式会使用变量原来的值
int m = 5;
int p = 5;
int a = 2 * ++m;
int b = 2 * p++;
System.out.println(m + " " + a);// 前缀形式,m = 6 ,a = 12
System.out.println(p + " " + b);// 后缀形式,使用变量原来的值 p = 6, b = 10
// 关系和boolean运算符
// 检测两者相等性,使用==
System.out.println(3==7);// 返回false
// 使用!=检测不相等
System.out.println(3!=7);// 返回true
// 从!=可以想到,感叹号!是逻辑非运算符
// &&与,||或
// 三元操作符 ? :
// x < y ? x : y
double y = 10;
System.out.println(x < y ? 1 : 2);// ?表示,判断前面的表达式,如果true,则返回:前面的,否则返回后面
// 位运算符
// 处理整型类型时,可以直接对组成整型数值的各个位完成操作
// 位运算符包括
// &("and") |("or") ^("xor") ~("not")
// 如果n是一个整数变量,
// 而且二进制表示的n从右边数第四位为1,则
int fourthBitFromRight = (n & 0b1000) / 0b1000;
System.out.println(fourthBitFromRight);
// 同一级别的运算符按照从左往右的次序进行计算
// 如
// 由于&&的优先级比||的优先级高,则
// a && b || c
// 等价于
// (a && b) || c
// 又因为+=是右结合运算符,则
// a += b += c
// 等价于
// a += (b += c)
}
}