《Java深入解析-透析Java本质的36个话题》笔记_第二章

## 第2 章 运算符与表达式52

### 话题9 莫衷一是——i+++j 该如何计算? 52

贪心规则:尽可能地对有效字符进行结合

i+++j 会解析为i++ + j

a--b 解析为a-- b 编译出错

\1717 会解析为 \171与7

\431 会解析为\43 与1

没有贪心规则转义字符将失去作用

 

### 话题10 千差万别——++i 与i++仅是“先加”与“后加”的差别吗?56

(1)无论是前置还是后置++都是先加1,再计算

前++是将变量值加1,再进行计算。

后++是先把变量赋值给一个临时变量,再对变量值加1,后续计算使用的是临时变量。

int i= 2;

int j = ++i * 30;

第二行相当于:

i +=1;

j=i *30;

 

int i= 2;

int j = i++ * 30;

第二行相当于:

int temp = i;

i +=1;

j=temp  * 30;

 

### 话题11 大相径庭——相除与求余在Java 中的具体表现 61

(1)除法

除数是0时,浮点运算是不会产生异常的

(2)求余

(3)+0与-0 的差异

整形是没区别

浮点型数值相等,使用“==”运算符返回true

 

浮点类型中的区别:

运算结果不一样

存储符号位不一样

 

### 话题12 移形换位——移位运算的真实剖析75

(1)移位理解误区

当左操作数是int类型,右操作数只有低5位是有效的(0~31),可以看做右操作数与掩码0x1f做与运算,再移位。

当左操作数是long类型,右操作数只有低6位是有效的(0~63),可以看做右操作数与掩码0x3f做与运算,再移位。

int i = 5 << -10

-10 补码:

1111 1111 1111 1111 1111 1111 1111 0110

低5位:

1 0110

相当于

int i = 5 << 22

跟求余是没有关系的

(2)除法跟移位误区

整数除法,向0取整

9/2,向0舍入(向下舍入),结果4

-9/2,向0舍入(向上舍入),结果-4

9 >> 1,相当向下舍入,结果4

-9 >> 1,相当向下舍入,结果-5

注意>>> 移位运算跟>>区别

>>> 无符号右移,0填充,注意负数可能会发生符号变化

 

### 话题13 鞭辟近里——条件运算符(?:)的类型深入 81

表达式1 ?: 表达式2 : 表达式3 ;

表达式1 必须为boolean或Boolean

表达式1 为true只计算表达式2,否则只计算表达式3 

 

结果的类型

表达式2表达式3 结果
boolean/Booleanboolean/Booleanboolean
null引用类型引用类型
引用类型null引用类型
null基本类型基本类型包装类型
基本类型null基本类型包装类型
除boolean的基本类型除boolean的基本类型大范围的类型(byte,short,char->int)
引用类型 T1基本类型 T2引用类型 S(S为T1,T2的最近共同父类)

 

### 话题14 井然有序——运算顺序的详细挖掘86

java中计算顺序都是从左向右

 

### 话题15 异曲同工——交换变量的3 种方式 90

```java

方式1:通过3个变量交换

int x = 1;

int y = 2;

int temp;

temp = x;

x = y;

y = temp;

 

方式2:通过相加交换

小心溢出

int x = 1;

int y = 2;

x = x+y;

y = x-y;

x = x-y;

 

通过相减交换

小心溢出

int x = 1;

int y = 2;

x = x-y;

y = x+y;

x = y-x;

 

方式3:通过异或

一个变量x异或另一个变量y两次,结果为x

int x = 1;

int y = 2;

x = x^y;

y = x^y;

x = x^y;

```

平常使用方式1,面试方式3,方式2不靠谱

 

### 话题16 择木而栖——开关选择表达式switch 的类型内幕 95

byte,short,char,int

1.5 还可以是上面4种的包装类型,枚举类型

1.7 支持String

 

(1)包装类处理

转基本数据类型

Integer i = new Integer(2);

swtich(i){

case 1:

break;

case 2;

break;

}

(2)枚举处理

枚举类型自动生成一个静态匿名内部类,带一个static的int类型数组,最后转换成int比较。

(3)String处理

拆分两个switch处理,一个switch根据String对象的哈希码对应一个临时的变量,第二个switch再根据这个临时变量对应我们的操作。

目录 目 录 第1章 基本概念 1 话题1 开门见山——测试你的Java水平 1 话题2 世外隐者——隐居深山的“关键字” 2 话题3 疑团满腹——标识符更深层的思考 6 话题4 鞭长莫及——我的特殊字符,你不能用! 10 话题5 移星换斗——从byte b = 1谈类型转换的神秘 16 话题6 扑朔迷离——浮点类型的种种悬疑 22 话题7 水落石出——浮点结构的最终解密 31 话题8 龙虎争霸——基本for循环与加强型for 循环的对比 45 第2章 运算符与表达式 52 话题9 莫衷一是——i+++j该如何计算? 52 话题10 千差万别——++i与i++仅是“先加”与“后加”的差别吗? 56 话题11 强大相径庭——相除与求余在Java中的具体表现 61 话题12 移形换位——移位运算的真实剖析 75 话题13 鞭辟近里——条件运算符(?:)的类型深入 81 话题14 井然有序——运算顺序的详细挖掘 86 话题15 异曲同工——交换变量的3种方式 90 话题16 择木而栖——开关选择表达式switch的类型内幕 95 第3章 String类 103 话题17 来龙去脉——“+”是怎样连接字符串的? 103 话题18 一成不变——不可修改的String对象 107 话题19 钩深索隐——String字符最大长度的探索 111 话题20 追本溯源——追寻String字面常量的“极限” 116 话题21 旧调重弹——再论equals方法与“==”的 区别 122 话题22 顺藤摸瓜——从字面常量到String常量池 136 第4章 方法、构造器与变量 143 话题23 相差无几——main方法很“特殊”吗? 143 话题24 一词多义——方法重载的详细说明 150 话题25 踵事增华——方法重写的真正条件 166 话题26 一叶障目——方法与成员变量的隐藏 177 话题27 发轫之始——执行初始化的构造器 182 话题28 殊途同归——成员变量不同的初始化方式 193 话题29 按部就班——初始化顺序与向前引用 206 第5章 类与接口 220 话题30 相辅相成——基本数据类型与包装类 220 话题31 分门别类——数组的阐述 232 话题32 规矩方圆——定义规范的接口类型 242 话题33 彻里至外——嵌套类型 248 话题34 不胜枚举——枚举的神秘 258 话题35 按部就班——加载、链接与初始化 265 话题36 择优录取——类型及其成员的选择 283 内容简介 本书分为5章,分别为“基本概念”,“运算符与表达式”,“String类”,“方法,构造器与变量”,“类与接口”。 通过以上方面介绍那些常见、常用却少为人知的Java知识。虽然内容相对基本,但都不是容易解答的。目前更多的开发人员(不乏多年开发经验者),也仅仅停留在Java表面的层次,而本书,将更深入一层地去讨论Java话题,令读者耳目一新,知其然,更知其所以然。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星点点-

请我喝杯咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值