hyperjava
日歷
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
統計
隨筆 - 0
文章 - 2
評論 - 2
引用 - 0
導航
BlogJava
首頁
發新隨筆
發新文章
聯系
聚合
管理
留言簿
給我留言
查看公開留言
查看私人留言
文章檔案
2008年11月 (2)
搜索
最新評論
1.?re: java表達式類型的自動提升
回樓上的,是啊
--hyperjava
2.?re: java表達式類型的自動提升
樓主這篇文章有些眼熟啊,是不是參考李剛的《瘋狂java講義》的啊?
--nexstone
java表達式類型的自動提升
當一個java算術表達式中包含多個基本類型的值時,整個算術表達式的數據類型將發生自動提升。Java定義如下的自動提升規則:
1. 所有byte型、short型和char型將被提升到int型。
2. 整個算術表達式的數據類型自動提升到與表達式中最高等級操作數同樣的類型。操作數的等級排列如下圖所示,位于箭頭右邊類型的等級高于位于箭頭左邊類型的等級。
下面程序示范了一個典型的錯誤:
//
定義一個short類型變量
short
sValue
=
5
;
//
表達式中的sValue將自動提升到int類型,則右邊的表達式類型為int
//
將一個int類型賦給short類型的變量將發生錯誤。
sValue
=
sValue
-
2
;
上面中的
sValue -2
表達式的類型將被提升到
int
類型,這樣就是把右邊的
int
型值賦給左邊的
short
型變量,從而引起錯誤。
下面代碼是表達式類型自動提升的正確示例代碼(程序清單同上):
byte
b
=
40
;
char
c
=
'
a
'
;
int
i
=
23
;
double
d
=
.
314
;
//
右邊表達式中在最高等級操作數為d(double型)
//
則右邊表達式的類型為double型,故賦給一個double型變量
double
result
=
b
+
c
+
i
*
d;
//
將輸出144.222
System.out.println(result);
必須指出的,表達式的類型將嚴格保持和表達式中最高等級操作數相同的類型,下面代碼中兩個int整數進行除法運算,即使無法除盡,也將得到一個int結果(程序清單同上):
int
val
=
3
;
//
右邊表達式中2個操作數都是int,故右邊表達式的類型為int
//
因此,雖然23/3不能除盡,依然得到一個int整數
int
intResult
=
23
/
val;
//
將輸出7
System.out.println(intResult);
從上面程序中可以看出,當兩個整數進行除法運算時,如果不能整數,得到結果將是把小數部分截斷取整后的整數。
如果表達式中包含了字符串,則又是另一番情形了:因為把加號(+)放在字符串和基本類型值之間時,這個加號是一個字符串連接運算符,而不是進行加法運算。看如下代碼:
//
輸出字符串Hello!a7
System.out.println(
"
Hello!
"
+
'
a
'
+
7
);
//
輸出字符串104Hello!
System.out.println(
'
a
'
+
7
+
"
Hello!
"
);
對于第一個表達式"Hello!" + 'a' + 7,先進行"Hello!" + 'a'的運算,將把'a'轉換成字符串,將拼接成字符串Hello!a,接著進行"Hello!a" + 7的運算,這也是一個字符串連接運算,得到結果是Hello!a7。對于第二個表達式,先進行'a' + 7加法運算,其中'a'自動提升到int型,變成a對應的ASCII值:97,從97 + 7將得到104,然后進行104 + "Hello!",104會自動轉換成字符串,將變成兩個字符串的連接運算,從而得到104Hello!。
posted on 2008-11-21 13:04
hyperjava
閱讀(3603)
評論(2)
編輯
收藏
評論:
#
re: java表達式類型的自動提升
nexstone
Posted @ 2008-11-25 17:07
樓主這篇文章有些眼熟啊,是不是參考李剛的《瘋狂java講義》的啊?
回復
更多評論
#
re: java表達式類型的自動提升
hyperjava
Posted @ 2008-11-28 17:47
回樓上的,是啊
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Copyright © hyperjava
Powered by:
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
通城县
|
辽宁省
|
黄平县
|
安陆市
|
台州市
|
庄浪县
|
澜沧
|
建德市
|
乐昌市
|
五指山市
|
伊吾县
|
曲麻莱县
|
手游
|
延庆县
|
克拉玛依市
|
普安县
|
伊通
|
达孜县
|
班玛县
|
西和县
|
湛江市
|
莲花县
|
屏东市
|
衡阳市
|
准格尔旗
|
乐都县
|
泰兴市
|
洛扎县
|
宝坻区
|
阳西县
|
高平市
|
莱芜市
|
女性
|
抚远县
|
旌德县
|
成武县
|
岑巩县
|
中江县
|
富民县
|
涟源市
|
银川市
|