我对java的数据类型感到困惑。

时间:2014-04-22 09:26:35

标签: java initialization

为什么这是对的?

char c1 = 125;

为什么这是错的?

char c2 = c1 + 1;

上述代码的正确方法应为:

char c2 = (char)(c1 + 1);

我很困惑。非常感谢你!

3 个答案:

答案 0 :(得分:8)

在Java中,您需要了解二进制(+)算术运算符的结果类型。下面是规则

  

1.如果任一操作数的类型为double,则另一个操作数转换为double   2.否则,如果任一操作数的类型为float,则另一个操作数转换为float   3.否则,如果任一操作数的类型为long,则另一个操作数转换为long   4.否则,两个操作数都将转换为int类型。

您的语句c1 + 1属于第4条规则,因此结果属于int类型,然后您需要明确地将其char强制转换为char变量。

答案 1 :(得分:1)

这是错误的,因为char小于int。在c1 + 1 c1被提升为。{1}} 要int添加1。当你试图把它放回char java抱怨时 因为它无法保证int适合char

-edit -

char c = 123的情况下,123部分是已知的,因此java可以真正地承诺 它总是适合char。这也可以:

final char c0 = 123;
char c1 = c0 + 1;

和此:

final int i0 = 123;
char c1 = i0 + 1;

答案 2 :(得分:0)

char c2 = c1 + 1;

Java语言规范确切地定义了整数的表示方式以及如何计算整数算术表达式。 默认情况下,赋值运算符右侧的算术表达式求值为int。 int 的存储空间大于。这就是为什么你必须通过使用强制转换明确告诉你知道自己在做什么。