不得不說,在沒學《Java編程思想》之前,我對Java的學習只是“知其然”,即只是知道該這樣用而已,但是當你看了《Java編程思想》之後,才真正明白什麼叫做“知其所以然”。當然這句話並不是我說的,而是某位大佬說的,這裏就引用一下吧。
今天學習到第三章的一元加(+)減(-)運算符,從字面上講,這兩個符號的操作數只有一個,而且他們與二元加減運算符都使用相同的符號,編譯器會根據表達式的書寫形式來判斷是哪一種。比如:
x = -a;
上面這條語句很顯然,無論是編譯器還是讀者都能讀出這裏的減號是一元減號運算符,但是下面的語句可能就會不一樣了。
x = a * -b;
這樣的語句編譯器能正確讀出來,但是讀者可能就會搞糊塗,所以有時需要明確地寫成這樣:
x = a * (-b);
接下來纔是我寫這篇文章的目的:
《Java編程思想》原文中對這兩個符號的作用做了這樣的總結:
一元減號用於轉變數據的符號,而一元加號只是爲了與一元減號相對應,但是它唯一的作用僅僅是將較小類型的操作數提升爲int。
加亮的這句話第一次看的時候看不懂,因爲根據我自己無法用代碼去證明這句話的正確性,於是我在網絡上搜了一下,發現網絡上的回答也只是一知半解,於是自己找樂原版英文書,發現書中原文是這樣子的。
高亮中文部分在我淺顯的英文功力面前的理解是沒有“它唯一的作用僅僅是將較小類型的操作數提升爲int.”這句話,也就是它除了和一元減號運算符相呼應之外沒有任何的作用。但是中文版既然加上去了也不能說它錯吧,肯定是在翻譯的時候Java已經變了,於是就增加了上去(我自己的理解)。
不過後來問了網絡上的大佬終於給證明出來了。如下:
public class Yiyuan {
public static void main(String[] args) {
//定義一個byte類型變量
byte b = 1;
//用一元加號後賦值給c,發現報錯。
byte c = +b;
//再賦值給整型變量d後能編譯通過,證明b編程了int型。
int d = +b;
}
}