i=i+10和i+=10的区别

先说明一下它们的区别:

1.i=i+10执行的效率比i+=10低

2.i=i+10执行完成后的数据类型为int和a的类型的最高者;i+=10执行后的数据类型为i的数据类型。

 

接下来使用两个个简单的小例子来说明它们之间的执行效率的区别:

第一个例子:

public class Test{
  public static void main(String[] args){
   int i=0;
   i=i+10;
   } 
 }

javap -c 后的文件

Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0 //把0放入栈     
       1: istore_1 //把栈中的0存入局部变量表     
       2: iload_1 //把局部变量表中的0压入栈      
       3: bipush        10  //把10压入栈 
       5: iadd  //把栈中的两个数相加        
       6: istore_1 //存放到局部变量表     
       7: return        
}

 
第二个例子:

public class Test1{
		public static void main(String[] args){
			int i=0;
			i+=10;
			}
	}

javap -c 后的文件:

Compiled from "Test1.java"
public class Test1 {
  public Test1();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0  //把0压入栈    
       1: istore_1  //把栈中的0存入局部变量表   
       2: iinc          1, 10 //把局部变量表中的1再加上10
       5: return        
}

通过上面两个小例子很明显的可以看到它们的区别了;

(i+=10)确实比(i=i+10)效率高点,因为其可以直接在局部变量表中完成操作。

接下来这两个例子用来说明它们执行后的数据类型:

第一个例子:

public class Test{
		public static void main(String[] args){
			char i=0;
			i=i+10;//这里的i已经是int类型
			char j=0;
			j=i;//必须使用强制类型转换
			}	
	}
这个class文件是不能通过编译的,必须使用强制类型转换才行。


第二个例子:

public class Test1{
		public static void main(String[] args){
			char i=0;
			i+=10;//执行完成后依然为char类型
			char j=0;
			j=i;//不需要强制类型转换
			}
	}
这个class直接可以通过编译,不需要使用强制类型转换


 

 



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值