java笔记5 混合运算 各种运算符

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";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值