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
的类型。
所以如果 i
是 byte
,那么 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"。编写规范的人很可能是这样写的,因此 ++
对所有数字类型都有用(不仅仅是 int
和 long
)。
内部用于 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:自动执行内部类型转换
谁能解决我的困惑,这是我的代码:
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
的类型。
所以如果 i
是 byte
,那么 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"。编写规范的人很可能是这样写的,因此 ++
对所有数字类型都有用(不仅仅是 int
和 long
)。
内部用于 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:自动执行内部类型转换