三目运算中的数据类型相关问题

public
class Test{

 

    public
static
void main(String[] args) {

        int
a = 5;

        //double i = a < 5 ? 8.5 : 9;

        System.out.println("结果是: " +(a < 5 ? 8.5 : 9));//输出结果是9.0

        //为什么输出结果是9.0而不是9?

        //原因:因为三目运算中8.5double类型,9int类型,这时java就会根据运算符的精度类型进行自动转换,由于double精度类型高于int,故把int转为double数据类型。

        

        char
x = 'x';

        int
i = 10;

        int
b = (int)'
';

        System.out.println(b);

        System.out.println(false ? i : x);//结果一输出为:120

        System.out.println(false ? 10 : x);//结果二输出为:x

        System.out.println(true ? 33: x);//结果三输出为:!

        System.out.println(true ? 20013: x);//结果四输出为:

        System.out.println(true ? 6.9: x);//结果五输出为:6.9

        
 

        

        /*

        对于结果一,由于i是一个int类型的变量,因此第一个输出x被提升为int类型了,xint值为120,故输出结果为120;

        对于结果二,java编程规范中提到:在三目运算中,当后两个表达式中有一个是常量表达式时(本题中的10),另一个类型T(本题中是char),

        而常量表达式可以被T表示时(representable in tape T),输出结果为T类型;

        对于结果三,输出为感叹号(!),是由于33Unicode码表中对应于!;此处涉及到char类型对应的码表,下图只简单列出开始的ASCLL码表:

        对于结果四,输出为中,是由于char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,而中国的""unicode编码字符集中对应于20013;

        对于结果五,由于6.9默认为double数据类型,而且不可以用T(即本题中的char)表示,故结果为6.9;

        */

        

    }

 

}

补充知识:
Unicode码扩展自ASCII字元集, 它前128个字符就是ASCII码,之后是扩展码。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是电脑中最具支配地位的标准,所以这的确是一个很高的目标。

    

ASCLL码表

ASCII值

控制字符

ASCII值

控制字符

ASCII值

控制字符

ASCII值

控制字符

0

NUT

32

(space)

64

@

96

1

SOH

33

65

A

97

a

2

STX

34

"

66

B

98

b

3

ETX

35

#

67

C

99

c

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

E

101

e

6

ACK

38

&

70

F

102

f

7

BEL

39

,

71

G

103

g

8

BS

40

(

72

H

104

h

9

HT

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

K

107

k

12

FF

44

,

76

L

108

l

13

CR

45

-

77

M

109

m

14

SO

46

.

78

N

110

n

15

SI

47

/

79

O

111

o

16

DLE

48

0

80

P

112

p

17

DCI

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

X

115

s

20

DC4

52

4

84

T

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

TB

55

7

87

W

119

w

24

CAN

56

8

88

X

120

x

25

EM

57

9

89

Y

121

y

26

SUB

58

:

90

Z

122

z

27

ESC

59

;

91

[

123

{

28

FS

60

<

92

/

124

|

29

GS

61

=

93

]

125

}

30

RS

62

>

94

^

126

~

31

US

63

?

95

127

DEL

 

 

NUL 空

VT 垂直制表

SYN 空转同步

SOH 标题开始

FF  走纸控制

ETB  信息组传送结束

STX  正文开始

CR  回车

CAN  作废

ETX  正文结束

SO  移位输出

EM  纸尽

EOY  传输结束

SI  移位输入

SUB  换置

ENQ  询问字符

DLE 空格

ESC  换码

ACK  承认

DC1  设备控制1

FS   文字分隔符

BEL  报警

DC2  设备控制2

GS   组分隔符

BS  退一格

DC3  设备控制3

RS   记录分隔符

HT  横向列表

DC4  设备控制4

US   单元分隔符

LF  换行

NAK  否定

DEL  删除

小温

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: