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 )