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



我一直在互联网上寻找凯撒密码,虽然我理解循环,但我不明白为什么这行代码能够将一个字符转换为另一个字符? 我不明白这里的这一行:

        letter = (char)(letter - 26);

当我取出(字符)时,它不起作用,我从未见过它的类型在括号中,然后是操作。

希望这是一个简单的问题,感谢您的帮助。

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;
    }

(char)是一个演员表。 这意味着它采用一种类型的值,并将其转换为另一种类型的值。 因此,如果x是一个int(double)x产生一个double,其值与整数值相同。

在此表达式中(char)是必需的原因是 Java 对类型为 intlong 的值执行其所有整数算术。 所以即使letterchar,在表达式letter + 26中,letter也会自动转换为int,然后26被加到整数中。 (char)将其转换回char类型(即从 0 到 65535 的整数值)。 Java不会自动将较大的整数类型(int,其值从-2147483648到2147483647)转换为较短的整数类型(char),因此有必要使用强制转换。

但是,Java确实允许这样做:

letter += 26;

具有相同的效果,并且不需要石膏。

英文

字母中有26个字母,char是整数类型

char ch = 'Z' - 25;
System.out.println(ch); // <-- A

JLS-4.2.1 - 整型和值说(部分),

对于char,从 '\u0000' 到 '\uffff' (含),即从 0 到 65535

最新更新