使用xor运算符时出现Java编译错误

per*_*ery 0 java precision bit-manipulation

我试图在Java中编写一个字符串反向函数(我知道我可以简单地调用一个现有的函数,但我正在尝试这个来练习和学习)

public class HelloWorld{

    public static void main(String []args){
        String s = reverse("abcd");
        System.out.println(s);

    }
    public static String reverse(String str){
        int end = str.length() - 1;
        int start = 0;

        char[] arr = str.toCharArray();
        while (start < end)
        {
            arr[start] =  arr[start] ^ arr[end];

            arr[end] = arr[start] ^ arr[end];

            arr[start] = arr[start] ^ arr[end];

            start++;
            end--;
        }
        String ret = new String(arr);
        return ret; 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它给了我这些错误:

HelloWorld.java:16: error: possible loss of precision
            arr[start] =  arr[start] ^ arr[end];
                                     ^
  required: char
  found:    int
HelloWorld.java:18: error: possible loss of precision
            arr[end] = arr[start] ^ arr[end];
                                  ^
  required: char
  found:    int
HelloWorld.java:20: error: possible loss of precision
            arr[start] = arr[start] ^ arr[end];
                                    ^
  required: char
  found:    int
3 errors
Run Code Online (Sandbox Code Playgroud)

我试过像铸造一样

arr[end] = (char) arr[start] ^ arr[end];
Run Code Online (Sandbox Code Playgroud)

没有解决问题.这里发生了什么?

Rod*_*uin 7

    I have tried casting like
    arr[end] = (char) arr[start] ^ arr[end];
Run Code Online (Sandbox Code Playgroud)

你只铸造了第一个char,但不是另一个从而给你的结果,xorinteger/decimal value焦炭的不是char value自己.

样品:

相反,你可以将它包装在括号中,并将操作的结果转换为char.

(char) (arr[start] ^ arr[end]);
Run Code Online (Sandbox Code Playgroud)