Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java a=a+b-->无法从int转换为char。a+=b-->通过_Java_Arrays - Fatal编程技术网

Java a=a+b-->无法从int转换为char。a+=b-->通过

Java a=a+b-->无法从int转换为char。a+=b-->通过,java,arrays,Java,Arrays,你好,我现在有个情况 String myStrings = new String(); myStrings = "10.42.0.1"; char[] charNum = myStrings.toCharArray(); //convert string to char array char checkSum = 0; A: 这意味着charNum[i]在内存中有4个字节,这让我很困惑,因为我使用char2bytes来计算,而不是charNum[i]引用变量。如果它真的使用charNum[i]

你好,我现在有个情况

String myStrings = new String();
myStrings = "10.42.0.1";
char[] charNum = myStrings.toCharArray(); //convert string to char array
char checkSum = 0;
A:

这意味着charNum[i]在内存中有4个字节,这让我很困惑,因为我使用char2bytes来计算,而不是charNum[i]引用变量。如果它真的使用charNum[i]4bytes,引用变量来进行计算,为什么我要得到正确的校验和值?那么,有人能告诉我我是误会了Java还是错过了一些概念

如果您能详细解释,我们将不胜感激


提前谢谢。

这比你想象的要简单

如果添加两个字符,它将始终创建int


在一些方面你是不正确的:char数组中的单元格值是char,而不是reference,因此charNum[i]是char,它只有2个字节宽。

它比你想象的要简单:

如果添加两个字符,它将始终创建int

在一些方面你是不对的:char数组中的单元格值是char,而不是reference,因此charNum[i]是char,它只有2个字节宽。

答案在于二进制数字提升。所有操作数都升级为较宽操作数的类型,并且至少升级到int。这由以下描述:

二,。扩展原语转换§5.1.2用于转换以下规则指定的一个或两个操作数:

如果其中一个操作数的类型为double,则另一个操作数将转换为double

否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float

否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long

否则,两个操作数都将转换为int类型

重点矿山

因此,char校验和加上char charNum[i]是一个整数。

答案在于二进制数字提升。所有操作数都升级为较宽操作数的类型,并且至少升级到int。这由以下描述:

二,。扩展原语转换§5.1.2用于转换以下规则指定的一个或两个操作数:

如果其中一个操作数的类型为double,则另一个操作数将转换为double

否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float

否则,如果其中一个操作数的类型为long,则另一个操作数将转换为long

否则,两个操作数都将转换为int类型

重点矿山


因此,char校验和加上char charNum[i]是一个整数。

Sotirios Delimanolis-在你评论之前,你应该阅读他要求的内容,他指出他知道这一点diadic+运算符总是返回至少一个整数范围的结果。这与一个操作数是数组元素这一事实无关。同样的情况也会发生在两个char变量上。@libik但他不明白为什么checkSum=checkSum+charNum[i];不起作用,这在各种答案中都有解释。Sotirios Delimanolis-你指给他的问题不是他想要的,因此你错了,你不应该指向他。Sotirios Delimanolis-在你评论之前,你应该读一下他要的东西,他指出他知道,diadic+运算符总是返回至少一个整型的结果。这与一个操作数是数组元素这一事实无关。同样的情况也会发生在两个char变量上。@libik但他不明白为什么checkSum=checkSum+charNum[i];不起作用,这在各种答案中都有解释。Sotirios Delimanolis-你指的问题不是他想要的,因此你错了,你不应该指向他。因为diadic+将字符提升为int。因为diadic+将字符提升为int。好吧,现在我明白了,谢谢你们。不要以为JAVA是Cok,现在我明白了,谢谢你们。不要认为JAVA是C语言
for(int i = 0; i <= 8; i++) { 
    checkSum += charNum[i]; 
}
for(int i = 0; i <= 8; i++) { 
     checkSum = checkSum +charNum[i]; 
}
checkSum = checkSum+charNum[i];
( 2bytes )   =  ( 2bytes )  +      ( 4bytes )