Skip to content

Commit 7fcff93

Browse files
committed
add type casting
1 parent 6423926 commit 7fcff93

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

Lesson05/Lesson05.md

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@
4848
但是,从输出的第二行我们可以发现,这东西的结果是不同的。后缀用法中,结果`y`为操作数`x1`的原值;前缀用法中,结果`z`为操作数`x2`在自增后的新值。当然,如果你觉得你搞不清楚这个东西,那么,像这样分开写就是你最好的选择:
4949

5050
```java
51-
int y = x1; x1++;
52-
x2++; int z = x2;
51+
int y = x1;
52+
x1++;
53+
x2++;
54+
int z = x2;
5355
```
5456

5557
别忘了,你们还是得熟悉这个呀,毕竟考试有可能会考,可以自己多试试哦!
@@ -107,9 +109,50 @@ System.out.print("a+b = " + a+b);
107109
a+b = 12
108110
```
109111

110-
为什么会这样呢?要注意的是,我们在优先级相同的情况下是从左往右算的,也就是说,`a+b`的结果并不先算的,先算的是`"a+b = " + a`,这是一个字符串拼接操作,结果是一个新字符串`"a+b = 1"`。然后这个字符串又和b相加,也是一个字符串拼接操作,于是就出现了这样的结果,所以这种时候一定要在后面的`a+b`加上一个小括号哦~
112+
为什么会这样呢?要注意的是,我们在优先级相同的情况下是从左往右算的,也就是说,`a+b`的结果并不是先算的,先算的是`"a+b = " + a`,这是一个字符串拼接操作,这个东西的结果是一个新字符串`"a+b = 1"`。然后这个字符串又和b相加,也是一个字符串拼接操作,于是就出现了的结果`a+b = 12`,所以这种时候一定要在后面的`a+b`加上一个小括号让它先计算哦~
111113

112114

113115

114116
## 3 类型转换
115117

118+
不知道大家有没有试过这样的运算:
119+
120+
```java
121+
System.out.println(23/5);
122+
```
123+
124+
或许你期望的答案是`4.6`,但是程序就像爱情一样求而不得、模模糊糊。他只告诉你答案是`4`,却并没有告诉你精确答案。这是因为你是用两个int类型的数进行运算的,所以程序认为你的结果也应该是一个int类型的数,所以它只显示了答案的整数部分。
125+
126+
为了得到精确的结果,你可以直接使用double类型的直接量,加上一个`.0`
127+
128+
```java
129+
System.out.println(23.0/5);
130+
```
131+
132+
我们前面已经学到浮点型直接量会是double类型的,而在一个二元运算中,其中一个是整数,另一个是浮点数时,Java会**自动**将整数转换为浮点型,再进行运算,在浮点运算里,浮点数的精确答案就能表示出来了。这就是Java的**自动类型转换**
133+
134+
你也可以用到**强制类型转换**的方式:
135+
136+
```java
137+
System.out.println((double)23/5);
138+
```
139+
140+
我们前面已经学到整型直接量会是int类型的,`23`前面的`(double)`就把这个原本是int的23变成了double类型的数。之后就和上面的过程一样了。
141+
142+
143+
144+
我们来概念性地总结一下:
145+
146+
类型转换的过程是将一种类型转换为另一种数据类型的操作。大家还记得各种类型所能表示的数的范围吧,Java可以**自动**地将小范围类型拓宽为大范围的类型(为什么?),这就是**自动类型转换**。但是反过来则一定需要**强制类型转换**,比如`int p = (int)1.7;`,这会保留整数部分`1`作为结果赋值给int类型的变量`p`
147+
148+
149+
150+
以下是一些注意事项:
151+
152+
- 类型转换是不会改变被转换变量本身的类型的,只会改变变量在运算时使用的值。因为变量一经声明,数据类型是绝对不会改变的
153+
154+
```java
155+
double d = 4.5;
156+
int x = (int)d; // d is still 4.5
157+
```
158+

0 commit comments

Comments
 (0)