day3 2020 11 21
补充一点
整数没有超出char范围[0,65535]可以直接赋给char(无需强转,规定是这样),
表示unicode编码的代码单元,97是'a'
可能输出来一些看不懂的字符
char c = 65535;
原码反码补码(这一块只需了解)
计算机在底层存储数据时,一律存储的是‘二进制的补码形式’
因为补码形式效率高(无需多问)
对于一个正数来说,原码补码反码都是同一个
对于一个负数:
byte b = -1; 原码: 00000001
反码: 符号位不变 按位取反 反码: 11111110
补码: 反码+1 补码: 11111111
byte b = (byte)150; //
System.out.println(b); // 输出-106
混合运算
1.byte char short做混合运算的时候,各自先转化为int再做运算
比如:
// 方法体代码
char c = 'a'; // 即97
byte b = 1;
System.out.println(c + b); // 输出98
short s = c + b; // 报错,不兼容的类型,从int转换到short可能会有损失
2.多种数据类型混合运算,最终的结果是类型‘最大容量’对应的类型。
(char + short + byte除外,它们会各自转化为int再做运算。)
long a = 10L;
char c1 = 'a';
int i = 99;
short s = 1;
System.out.println(a + c1 + i + s); // 报错,从long到int可能有损失
3.规定:int和int运算最终结果还是int
int temp = 10 / 3;
System.out.println(temp); // 输出:3 ;1/2输出:0
//在java中计算结果不一定是精确的
浮点型 加 类型转换补充
float:四个字节 单精度
double:八个字节 双精度
10.0 / 3采用float来存储的话结果可能是:3.33333
10.0 / 3采用double来存储的话可能是:3.333333333333
对于1 / 3(无限循环),float和double只能存储近似值
银行方面,财务软件double精度不够,采用精度更高的java.math.BigDecimal
// float容量>long容量 (虽然long占用八个字节)
// 容量排序byte<short(char)<int<long<float<double
// 小容量到大,自动转换, 反过来需要强类型转换(运行时可能有精度损失)
// boolean类型不能转换
任何一个浮点型数据默认被当做double来处理
想把它当作float,字面量后面加F/f
算术运算符
// 方法体代码
i = 1
x = i++; 先赋值,再自加,(先x = i 再 i = i + 1;)
x = ++i; 先自加,再赋值,(先i = i + 1 再 x = i;)
关系运算符
==
!= (you know?感叹号有中英之分,别搞错了!!)
所有の关系运算结果都是布尔类型
逻辑运算符
& 与 并且 都对才对
| 或 或者 都错才错
! 非
&& 短路与
|| 短路非
要求左右都是布尔类型,运算结果也是布尔类型
短路与
&&左边是false,则短路,&&右边表达式不再执行,
比如
y = 0;
System.out.println(false && y++);
System.out.println(y); // 结果为 0
而逻辑与,&左边是false,右边还会执行
赋值运算符
k += 1和k = k + 1;
实质不一样
byte b = 100;
b = b + 1; // 编译错误,byte类型的b和int类型的1运算结果是int,赋值给byte
// 大容量转小容量,显示从int到byte可能有损失精度
b += 1; // 改成这个就不会报错,这里相当于b = (byte)(b + 1);
使用扩展符赋值运算,*= /= -= %= など ,永远不会改变运算结果类型
三目运算符
布尔表达式?表达式1:表达式2
布尔为true,表达式1的执行结果作为整个表达式的结果
false 2
100; // 报错,不是语句
gender = True;
char c = gender?'男':'女'; // 最终结果是字符型,所以赋值给char类型(双引号是String型)
字符串连接运算符
+ 任意一边是字符串类型(""),+会进行字符串的拼接操作,结果还是字符串类型
a = 1;
b = 2;
System.out.println(a + b + "168"); // 若无小括号,多个括号遵循从左右向右的顺序依次执行
// 输出 3168
字符串类型的变量的定义,其中String中S是大写
String name = "egon";