在Java中,允许以下操作:
char c = 'A' + 1;
在这里,c将保持值“ B”。上面,首先对表达式求值。所以’A’被转换为65,整个表达式的计算结果为66,然后将66转换为’B’,因为我们将值存储在char中。
但是,以下给出了编译时错误:
char c = 'A';
c = c + 1;
关于Java如何以不同的方式看待表达式的解释是什么?顺便说一句,以下内容也可以正常工作:
char c = 'A';
c++;
第一个示例(编译)很特殊,因为加法的两个操作数都是文字。
以下是一些定义:
int
到char
被称为基本收缩转换,因为char
是比较小的类型int
。'A' + 1
是一个常量表达式。常量表达式(基本上)是一个表达式,其结果始终相同,并且可以在编译时确定。尤其是,'A' + 1
是一个常量表达式,因为的操作数+都是文字。的分配期间,缩小转换被允许byte,short并且char,如果分配的右手边是一个常量表达式:
此外,如果表达式[根据右手侧]是类型的常量表达式byte
,short
,char
,或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,对变量的值和值执行二进制数值提升* 。如有必要,可通过将原始和变窄来对其进行变窄和/或在存储变量之前将其进行装箱转换为变量的类型。
(* 二元数字升级需要byte
,short
以及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字符串的字符数组的指针。 返回值