当前位置: 首页 > 面试题库 >

Java - char, int conversions

空慈
2023-03-14
问题内容

在Java中,允许以下操作:

char c = 'A' + 1;

在这里,c将保持值“ B”。上面,首先对表达式求值。所以’A’被转换为65,整个表达式的计算结果为66,然后将66转换为’B’,因为我们将值存储在char中。

但是,以下给出了编译时错误:

char c = 'A';
c = c + 1;

关于Java如何以不同的方式看待表达式的解释是什么?顺便说一句,以下内容也可以正常工作:

char c = 'A';
c++;

问题答案:

第一个示例(编译)很特殊,因为加法的两个操作数都是文字。

以下是一些定义:

  • 一个转换intchar被称为基本收缩转换,因为char是比较小的类型int
  • 'A' + 1是一个常量表达式。常量表达式(基本上)是一个表达式,其结果始终相同,并且可以在编译时确定。尤其是,'A' + 1是一个常量表达式,因为的操作数+都是文字。

的分配期间,缩小转换被允许byte,short并且char,如果分配的右手边是一个常量表达式:

此外,如果表达式[根据右手侧]是类型的常量表达式byteshortchar,或int

如果变量的类型为byte,short或char,并且常量表达式的值在变量的类型中可表示,则可以使用缩窄的原始转换。
c + 1是不是一个常量表达式,因为c是非final可变的,所以对于分配发生编译时间错误。通过查看代码,我们可以确定结果始终相同,但是在这种情况下,不允许编译器执行该操作。

我们可以做的一件有趣的事情是:

final char a = 'a';
char b = a + 1;

在那种情况下a + 1 是一个常量表达式,因为它是一个用常量表达式初始化a的final变量。

警告“如果[…]值[…]在变量的类型中是可表示的”,则意味着将不编译以下内容:

char c = 'A' + 99999;

'A' + 99999(其是100064,或0x186E0)太大,以适应于char,因为char是无符号16位整数。

至于后缀++运算符:

后缀增量表达式的类型是变量的类型。

在加法之前1,对变量的值和值执行二进制数值提升* 。如有必要,可通过将原始和变窄来对其进行变窄和/或在存储变量之前将其进行装箱转换为变量的类型。

(* 二元数字升级需要byteshort以及char运营商的操作数等+,并把它们转换成int或其他一些更大的类型。Java并不在整型小于做算术题int。)

换句话说,该语句c++;主要等同于:

c = (char)(c + 1);

(不同之处在于,如果将表达式的结果c++分配给某物,则该结果为增量c 之前的值。)



 类似资料:
  • 问题内容: 最近,在进行程序时,我遇到了一个问题。以下是程序的一部分 我不明白这行代码的作用: 我猜想它正在递增lettercounts数组中特定字符的值(最初为0);我猜’a’的索引是0,’z’的索引是25。但是我想了解那小段代码是如何工作的。 问题答案: 目的是计算每个字符的出现次数。 是一种获取字符在字母表中位置的巧妙方法。会给你0。会给你1。会给你2,依此类推。 该值用作数组的索引(如您正

  • 我的数组设置为在每个索引中包含一个字符串。这个字符串是航空公司座位表的表示。 在用户为要保留的行和列输入字符值后,我应该用“X”替换座位。例如,他们输入:row:1column:A,在1A处,我应该用X替换A,这样其他用户就不能再次签出它。我正在使用: 在打印完数组的语句后,我注意到没有任何变化。

  • 描述 (Description) C库函数char *strtok(char *str, const char *delim)使用分隔符delim将字符串str分解为一系列标记。 声明 (Declaration) 以下是strtok()函数的声明。 char *strtok(char *str, const char *delim) 参数 (Parameters) str - 修改此字符串的内容

  • 描述 (Description) C库函数char *strcpy(char *dest, const char *src)将char *strcpy(char *dest, const char *src)指向的字符串复制到dest 。 声明 (Declaration) 以下是strcpy()函数的声明。 char *strcpy(char *dest, const char *src) 参数

  • 描述 (Description) C库函数char *strcat(char *dest, const char *src)将char *strcat(char *dest, const char *src)指向的字符串追加到dest指向的字符串的末尾。 声明 (Declaration) 以下是strcat()函数的声明。 char *strcat(char *dest, const char *

  • 描述 (Description) C库函数char *gets(char *str)从stdin读取一行并将其存储到str指向的字符串中。 当读取换行符或达到文件结尾时(以先到者为准),它会停止。 声明 (Declaration) 以下是gets()函数的声明。 char *gets(char *str) 参数 (Parameters) str - 这是指向存储C字符串的字符数组的指针。 返回值