Java charvariable=(char)(charvariable+;3)这个语法是什么意思?
我一直在互联网上搜索caesar密码,虽然我了解循环,但我不明白为什么这行代码能够将一个字符转换为另一个字符?我不明白这句话:Java charvariable=(char)(charvariable+;3)这个语法是什么意思?,java,Java,我一直在互联网上搜索caesar密码,虽然我了解循环,但我不明白为什么这行代码能够将一个字符转换为另一个字符?我不明白这句话: letter = (char)(letter - 26); 当我取出(char)时,它不起作用,而且我从未见过它的类型在括号中,后跟一个操作 希望这是一个简单的问题,谢谢你的帮助 for (int i = 0; i < buffer.Length; i++) { // Letter. char letter
letter = (char)(letter - 26);
当我取出(char)时,它不起作用,而且我从未见过它的类型在括号中,后跟一个操作
希望这是一个简单的问题,谢谢你的帮助
for (int i = 0; i < buffer.Length; i++)
{
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + shift);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
//The following line is the line I don't understand. Why char in parentheses then another parentheses?
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}
for(int i=0;i'z')
{
//下一行是我不明白的那一行。为什么在括号里是char,然后是另一个括号?
字母=(字符)(字母-26);
}
否则如果(字母<'a')
{
字母=(字符)(字母+26);
}
//商店。
缓冲区[i]=字母;
}
英语字母表中有26个字母,字符是一种完整的类型
char ch = 'Z' - 25;
System.out.println(ch); // <-- A
charch='Z'-25;
System.out.println(ch);// (char)
是一种类型转换。这意味着它接受一种类型的值,并将其转换为另一种类型的值。因此,如果x
是int
,(double)x
产生一个double
,其值与整数值相同
在这个表达式中,之所以需要(char)
,是因为Java对int
或long
类型的值执行所有整数运算。因此,即使letter
是char
,在表达式letter+26
中,letter
将自动转换为int
,然后将26添加到整数中(char)
将其转换回char
类型(即0到65535之间的整数值)。Java不会自动将较大的整数类型(int
,其值从-2147483648到2147483647)转换为较短的整数类型(char
),因此需要使用强制转换
但是,Java确实允许这样做:
letter += 26;
这也有同样的效果,而且不需要石膏。啊,我的手滑倒了。无论如何,请不要将代码片段用于非javascript的代码。Java不能很好地处理这些问题。括号中的字符用于在Java中执行[cast][1]。[1] 当前位置我认为这不可编译<代码>'Z'-25
应该是int
。谢谢。我现在明白了。我更困惑的是它的演员阵容部分。@GáborBakos用Java8测试过。有效。@DarthShiznit它将位模式从一种类型转换为另一种类型。@ElliottFrisch在这种情况下可能是常数折叠<代码>字符z='z';char ch=z-25代码>没有。“它具有相同的效果,并且不需要强制转换。”实际上,在这种情况下,它执行规范强制的隐式强制转换。@GáborBakos我想很明显我说的是显式强制转换。隐式强制转换在语言规则中定义语义效果,但底层实现没有理由执行实际的32位加法和转换。