Java charvariable=(char)(charvariable+;3)这个语法是什么意思?

Java charvariable=(char)(charvariable+;3)这个语法是什么意思?,java,Java,我一直在互联网上搜索caesar密码,虽然我了解循环,但我不明白为什么这行代码能够将一个字符转换为另一个字符?我不明白这句话: letter = (char)(letter - 26); 当我取出(char)时,它不起作用,而且我从未见过它的类型在括号中,后跟一个操作 希望这是一个简单的问题,谢谢你的帮助 for (int i = 0; i < buffer.Length; i++) { // Letter. char letter

我一直在互联网上搜索caesar密码,虽然我了解循环,但我不明白为什么这行代码能够将一个字符转换为另一个字符?我不明白这句话:

        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位加法和转换。