在练习Java时,我随机想出了这个:
class test
{
public static void main(String arg[])
{
char x='A';
x=x+1;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它会抛出一个错误,因为我们不能将数值添加1到A数学中的字母,但以下程序正确运行并打印
B
Run Code Online (Sandbox Code Playgroud)
怎么可能?
das*_*ght 34
在Java中,char是一种数字类型.当您添加1到a时char,您将进入下一个unicode代码点.如果是'A',下一个代码点是'B':
char x='A';
x+=1;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
请注意,您无法使用,x=x+1因为它会导致隐式缩小转换.你需要使用x++或x+=1代替.
这是与您的程序等效的程序:
public class Tester {
public static void main(String args[]){
char start='\u0041';
char next='\u0041'+1;
System.out.println(next);
}
}
Run Code Online (Sandbox Code Playgroud)
但如您所见,next=start+1, 不起作用。这就是java的处理方式。
原因可能是我们可能会意外地使用start, 并将整数1视为start变量int并使用该表达式。因为,java对于最小化逻辑错误非常严格。他们是按照我的想法设计的。
但是,当您这样做时,char next='\u0041'+1;很明显这'\u0041'是一个字符,并且1将隐式转换为 2 个字节。这是程序员不可能犯的错误。也许这就是他们允许的原因。
char在java中是2个字节。char支持unicode字符。当您使用偏移整数添加或减去 char var 时,unicode将产生 unicode 表中的等效字符。因为B紧邻 ,所以A你得到了B。
| 归档时间: |
|
| 查看次数: |
62502 次 |
| 最近记录: |