在java中使用*=?

在java中使用*=?,java,operator-keyword,multiplication,Java,Operator Keyword,Multiplication,(i+=1)相当于i=i+1 是否可以通过使用乘法实现上述功能: (i*=1),i=i*1 我已经尝试过将其声明为double,但我的结果中保留了0.0的值?听起来像是将0乘以1 0*1=0听起来你好像在用0乘以1 0*1=0如果i在相乘之前没有赋值(除零之外),那么它将是0*1=0。如果i在相乘之前没有赋值(除零之外),那么它将是0*1=0。首先声明double i=1.0(或者int i=1;如果不需要十进制值)。看起来您是在乘以零。当然,那么i时间1将始终是1,除非您在其他地方修改i的值

(i+=1)
相当于
i=i+1

是否可以通过使用乘法实现上述功能:

(i*=1)
i=i*1


我已经尝试过将其声明为double,但我的结果中保留了0.0的值?

听起来像是将0乘以1


0*1=0

听起来你好像在用0乘以1


0*1=0

如果
i
在相乘之前没有赋值(除零之外),那么它将是0*1=0。

如果
i
在相乘之前没有赋值(除零之外),那么它将是0*1=0。

首先声明
double i=1.0
(或者
int i=1;
如果不需要十进制值)。看起来您是在乘以零。当然,那么
i
时间
1
将始终是
1
,除非您在其他地方修改
i
的值

除此之外,请注意
i*=1
几乎等同于
i=i*1
。问题在于细节,因为第一个表单将根据Java语言规范第节执行隐式转换:

复合赋值表达式自动将其执行的计算结果转换为左侧变量的类型。如果结果的类型与变量的类型相同,则强制转换无效。但是,如果结果的类型比变量的类型宽,则复合赋值运算符将执行静默缩小原语转换


首先声明
double i=1.0
(或者
int i=1;
如果不需要十进制值)。看起来您是在乘以零。当然,那么
i
时间
1
将始终是
1
,除非您在其他地方修改
i
的值

除此之外,请注意
i*=1
几乎等同于
i=i*1
。问题在于细节,因为第一个表单将根据Java语言规范第节执行隐式转换:

复合赋值表达式自动将其执行的计算结果转换为左侧变量的类型。如果结果的类型与变量的类型相同,则强制转换无效。但是,如果结果的类型比变量的类型宽,则复合赋值运算符将执行静默缩小原语转换


它采用默认值double,正如您在类范围中声明的那样

试试这个

class Test implements TestInterface {


        public static void main(String[] args){
            double i = 1;
            System.out.println(i *= 1);
        }
     }

它采用默认值double,正如您在类范围中声明的那样

试试这个

class Test implements TestInterface {


        public static void main(String[] args){
            double i = 1;
            System.out.println(i *= 1);
        }
     }

那么任何解决方案都可以像这样做above@cchua:你明白问题是什么吗?是的,我知道,因为我声明值为0,所以它保持乘以0。那么,除了使用
*=
@cchua做什么之外,您还有其他方法来做这件事吗?如果它是零,不管你用什么乘,或者怎么乘,结果都是零,那么任何解决方案都可以这样做above@cchua:你明白问题是什么吗?是的,我知道,因为我声明值为0,所以它保持乘以0。那么,除了使用
*=
@cchua做什么之外,您还有其他方法来做这件事吗?如果它是零,不管你用什么或怎样乘,结果都是零。你可以使用调试器在乘法前和乘法后得到i的值。是的,这是可能的。您可以使用调试器在乘法之前和乘法之后获取i的值。是的,这是可能的。