i = i+1 和 i++ 之间的区别

Difference Between i = i+1 & i++

谁能解决我的困惑,这是我的代码:

byte i = 0;

i++;
System.out.println(i);

结果:1

byte i = 0;

i = i+1;
System.out.println(i);

生成编译时错误:类型不匹配:无法从 int 转换为 byte

当我将其转换为字节时:i = (byte) (i+1); 然后愉快地得到结果 1

执行这个例子我明白 i = i+1 & i++ 执行不能相同的操作所以现在我想知道它们之间到底有什么区别...!!!

i++i+=1 将结果隐式转换回 i 的类型。

所以如果 ibyte,那么 i++; 而不是 等同于 i = i + 1; - 它实际上等同于i = (byte)(i + 1);.

来自 Java 语言规范,section 15.14.2,强调我的:

... the value 1 is added to the value of the variable and the sum is stored back into the variable. Before the addition, binary numeric promotion (§5.6.2) is performed on the value 1 and the value of the variable. If necessary, the sum is narrowed by a narrowing primitive conversion (§5.1.3) and/or subjected to boxing conversion (§5.1.7) to the type of the variable before it is stored.

没有根本原因,除了 "because the specification says so"。编写规范的人很可能是这样写的,因此 ++ 对所有数字类型都有用(不仅仅是 intlong)。

内部用于 short、char、byte 和 int 数据类型,如果执行任何算术运算,编译器会将数据类型升级为 int 并执行操作。编译器会将表达式结果值的数据类型更改为 int

所以对于字节 i

i = i+1; // will not work

因为i+1 将产生整数数据类型值。所以你必须在外部进行类型转换为

i = (byte)(i+1); // this is equivalent to i +=1; or you can say i++;

最后我发现我的问题(问题)更好理解所以在这里描述它以方便别人理解..!!!

1> i = i + 1

在 java 中,只要在两个或多个变量之间执行任何算术运算,那么它就是 return 值的类型取决于此等式:

RETURN VALUE TYPE = (int, MAXIMUM RANGE OF VARIABLE-1, MAXIMUM RANGE OF VARIABLE-N )

此处,Return 值类型:int

对于方程 (int, byte, byte) 所以 int 有最大范围..

字节 -> 1 字节大小 & int -> 4 字节大小

这就是为什么在 exe 上面我不能直接将 return 值存储在字节中它需要 外部类型转换 i = (byte) ( i+1)

2> i++

在 java 中,每当增量和减量操作像这样执行时,它的 return 值的类型取决于这个等式:

RETURN VALUE TYPE = (VARIABLE TYPE, VALUE + 1)

这些等式表示 内部类型转换 在这种情况下执行

必须记住:

案例 1如果需要则需要外部类型转换

案例 2自动执行内部类型转换