当前位置:编程学习 > JAVA >>

java中a+=b与a=a+b有什么区别么?

如题  求指教 --------------------编程问答-------------------- 没有任何区别,100%一样,鉴定完毕 --------------------编程问答-------------------- 一样,前者是是为了书写简便, --------------------编程问答-------------------- 是一样的...前面的写法更简洁而已 --------------------编程问答-------------------- 一样。 --------------------编程问答-------------------- 如果A,B一个short一个int那就有差别了 --------------------编程问答-------------------- 楼上说的对。
如果类型不同的话会引起问题。
--------------------编程问答-------------------- a+=b  --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型 --------------------编程问答-------------------- 有一点区别,a+=b,会自动转换类型。前阵有人问过类似问题。 --------------------编程问答--------------------
引用 5 楼 leehomwong 的回复:
如果A,B一个short一个int那就有差别了

+1
确切地说,a比b占用字节少的时候,前者系统会自动进行类型转换,后者必须自己进行类型转换

short a = 3;
int b = 5;
a += b; //相当于 a = (short)(a+b);系统自动进行类型转换

a = a+b; //编译通不过,需要自己进行转换,即 a = (short)(a+b); --------------------编程问答--------------------
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型

这个说的对,如果有这样的代码:short a = a + 1;这句编译时会报错,因为a+1以后,类型强制转换为int,这是在赋值给short类型的a就错了,但是short a=1; a+=1;就不会报错+=是Java的运算符,编译器会对他做特殊处理,因此可以正确编译. --------------------编程问答-------------------- 完全一样的,书写格式问题啊,效果一摸一样! --------------------编程问答-------------------- 是一样的效果来的! --------------------编程问答-------------------- a+=b 的运行效率 比 a=a+b 高。 --------------------编程问答--------------------
引用 10 楼 fanly1987444 的回复:
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型

这个说的对,如果有这样的代码:short a = a + 1;这句编译时会报错,因为a+1以后,类型强制转换为int,这是在赋值给short类型的a就错了,但是short a=1; a+=1;就不会报错……

对头 这个解释 我喜欢 --------------------编程问答-------------------- 貌似又是月经贴,楼主搜索下

short a=1,b=1;
a+=b;
a=a+b;

 唉以前经常给鄙视这问题 --------------------编程问答-------------------- 听说+=执行效率高一些,不过没验证过,估计也差不了多少。。。一般偶都是用+=。。偶第一家公司的编码规范要求就是要这样写。。 --------------------编程问答--------------------
引用 16 楼 bill0605030109 的回复:
听说+=执行效率高一些,不过没验证过,估计也差不了多少。。。一般偶都是用+=。。偶第一家公司的编码规范要求就是要这样写。。

C++操作符重载时有效率高这一说,java木有。 --------------------编程问答-------------------- 有时候会报错,就是转型的问题 --------------------编程问答-------------------- 今天又有收获了细节决定啊a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型
--------------------编程问答--------------------
引用 10 楼 fanly1987444 的回复:
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型

这个说的对,如果有这样的代码:short a = a + 1;这句编译时会报错,因为a+1以后,类型强制转换为int,这是在赋值给short类型的a就错了,但是short a=1; a+=1;就不会报错+……


这就是所谓的“基础”! --------------------编程问答-------------------- 一样,注意类型! --------------------编程问答-------------------- 围观,学习~
--------------------编程问答-------------------- ?
引用 22 楼 ak_47_a 的回复:
围观,学习~
--------------------编程问答-------------------- 学习,围观。 --------------------编程问答-------------------- 学习,类型还有长短一样,应该没有任何区别 --------------------编程问答-------------------- a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型 --------------------编程问答-------------------- 虽然知道,但是不注意这个问题,myeclipse都给提示了。。。 --------------------编程问答--------------------
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型


正解 --------------------编程问答-------------------- 当数据类型变了就一样了a+=b的结果是a的类型,a=a+b,左边a还是a的类型,右边是a,b中类型高的那个,也就是说如果a是short的,b是int的,左边short=右边int需要强制装换,负责损失精度 --------------------编程问答-------------------- += 会强制性转换类型

short a=1; int b=2;

a+=b; 不会报错
而 
 a=a+b ;这样就不行 必须a=a+(short)b 强制性类型转换 --------------------编程问答--------------------
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型


这个应该是这样的吧:a+=b --> a=(a.Type)(a+b);//返回的是a类型
--------------------编程问答-------------------- 加群 12890082 java asp.net
--------------------编程问答--------------------
引用 5 楼 leehomwong 的回复:
如果A,B一个short一个int那就有差别了
当类型不同,会有强制类型转换错误,使用前者则不会出现 --------------------编程问答-------------------- 如果类型一样 那没有区别 如果说类型不一样 a+=b 会把b转换a的类型 --------------------编程问答-------------------- 一样的 --------------------编程问答-------------------- - -!!!这也是问题么 --------------------编程问答-------------------- 如果A,B一个short一个int那就有差别了
确切地说,a比b占用字节少的时候,前者系统会自动进行类型转换,后者必须自己进行类型转换

short a = 3;
int b = 5;
a += b; //相当于 a = (short)(a+b);系统自动进行类型转换

a = a+b; //编译通不过,需要自己进行转换……
--------------------编程问答-------------------- 自己也学习了一下 真是高手如云  那么细节的东西  都可以想到 --------------------编程问答-------------------- /\d{4,4}-\d{1,2}-\d{1,2}/ --------------------编程问答--------------------
引用 7 楼 jayyounger 的回复:
a+=b  --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型


7楼正解,楼主可以结贴了。 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------

public class Test {

public static void main(String[] args) {
int a = 1;
int b = 1;
long begin = System.currentTimeMillis();
for (int i = 0; i < 2000000000; i++) {
a += b; 
}
long end = System.currentTimeMillis();

System.out.println("时间差是:"+(end-begin));
}
}


多次运行结果如下:

时间差是:915
时间差是:925
时间差是:925
时间差是:925
时间差是:925
时间差是:905
时间差是:900
时间差是:910
时间差是:980
时间差是:960
时间差是:960
====================================================

public class Demo {

public static void main(String[] args) {
int a = 1;
int b = 1;
long begin = System.currentTimeMillis();
for (int i = 0; i < 2000000000; i++) {
a =a+b; 
}
long end = System.currentTimeMillis();

System.out.println("时间差是:"+(end-begin));
}
}


多次运行结果如下:
public class Demo {

public static void main(String[] args) {
int a = 1;
int b = 1;
long begin = System.currentTimeMillis();
for (int i = 0; i < 2000000000; i++) {
a =a+b; 
}
long end = System.currentTimeMillis();

System.out.println("时间差是:"+(end-begin));
}
}
--------------------编程问答-------------------- 时间差是:905
时间差是:960
时间差是:985
时间差是:970
时间差是:970
时间差是:935
时间差是:945
时间差是:945
时间差是:900
时间差是:950 --------------------编程问答-------------------- 木有差别,方便好看 --------------------编程问答-------------------- 有一点点差别,就是前者会进行自动转型,但是我觉得你没必要考虑这么细的问题。 --------------------编程问答-------------------- 又学习了一个东西。 --------------------编程问答--------------------
引用 9 楼 qybao 的回复:
引用 5 楼 leehomwong 的回复:
如果A,B一个short一个int那就有差别了

+1
确切地说,a比b占用字节少的时候,前者系统会自动进行类型转换,后者必须自己进行类型转换

short a = 3;
int b = 5;
a += b; //相当于 a = (short)(a+b);系统自动进行类型转换

a = a+b; //编译通不过,需要自己进行转……

学习! --------------------编程问答-------------------- 目测没什么差别··· --------------------编程问答-------------------- 看了之后发现自己基础还没学牢啊。。。。。 --------------------编程问答--------------------
引用 8 楼 brightyq 的回复:
有一点区别,a+=b,会自动转换类型。前阵有人问过类似问题。


 += 符会自动强制转换

+1 --------------------编程问答-------------------- java要学的东西太多了! --------------------编程问答-------------------- 区别很大。。
a+=b当前返回a+b
a=a+b当前返回a --------------------编程问答-------------------- 个人认为没区别! --------------------编程问答-------------------- 一样,a+=b是简单写法,两者没什么区别 --------------------编程问答-------------------- 细节决定一切,这些小的细节在大的项目中有时起着很重要的作用
--------------------编程问答-------------------- 一不一样 自己去试试 这中东西 你试一试比你问十个人强百倍! 不学着自己去尝试永远也不会进步! --------------------编程问答-------------------- 我晕。。。应该没有那么细吧。。。你就理解没区别就OK了。。。 --------------------编程问答-------------------- 没有什么大的区别,但是也不是一点区别都没有~ --------------------编程问答-------------------- a = a + b;的意思就是让a的值增加b。在C++中,对于这种情况给出了一种简写
方案,即前面的语句可以写成:a += b。应当注意这两条语句从逻辑上讲都是使变量a的
值增b,但是它们实际是有区别的,后者可以被编译成优化的代码,因为其意思是使某一块
内存的值增加一定数量,而前者是将一个数字写入到某块内存中。所以如果可能,应尽量
使用后者,即a += b。这种语句可以让编译器进行一定的优化(但由于现在的编译器都非
常智能,能够发现a = a + b;是对一块内存的增值操作而不是一块内存的赋值操作,因此
上面两条语句实际上可以认为完全相同,仅仅只具有简写的功能了)。
    java做为Cs 家族的语言是否可这样理解? --------------------编程问答-------------------- 数据类型不同就不一样了 --------------------编程问答-------------------- C++ 中前者效率更好,JAVA没什么区别 --------------------编程问答-------------------- java中两者效率没差别,但是a+=b的写法会自动转换类型,个人观点还是a=a+b更好,需要类型转换的时候写成强制转换,这样能提高可读性。 --------------------编程问答-------------------- JAVA效率没差别吧? --------------------编程问答--------------------

short a = 10;
int b = 10;
a += b;
a = a + b;//这里会报错。。


a为int,b为short就正确

int a = 10;
short b = 10;
a += b;
a = a + b;
--------------------编程问答-------------------- a+=b 的运行效率 比 a=a+b 高。 --------------------编程问答-------------------- a+=b 的运行效率 比 a=a+b 高。 --------------------编程问答-------------------- 高手 
引用 7 楼 jayyounger 的回复:
a+=b  --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型
--------------------编程问答-------------------- 这么偏的问题哦~偶算是学习到了~ --------------------编程问答--------------------
引用 6 楼 z6683227 的回复:
楼上说的对。
如果类型不同的话会引起问题。


public class Test {

/**
 * @param args
 */
public static void main(String[] args) {

int  b = 1;

long a = 1;

a = b + a;

System.out.println("The Result is:" + a);

b = 1;

a = 1;

a += b;
System.out.println("The Result is:" + a);
}
}

結果:
The Result is:2
The Result is:2
--------------------编程问答--------------------
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型


public class Test {

/**
* @param args
*/
public static void main(String[] args) {

int b = 1;

long a = 1;

a = b + a;

System.out.println("The Result is:" + a);

b = 1;

a = 1;

a += b;
System.out.println("The Result is:" + a);
}
}

結果:
The Result is:2
The Result is:2


刚刚引用错误了! --------------------编程问答-------------------- 嗯,学习细节,平时没注重细节 --------------------编程问答--------------------
引用 10 楼 fanly1987444 的回复:
引用 7 楼 jayyounger 的回复:
a+=b --> a=(a.Type)a+b;//返回的是a类型
a=a+b --> a=a+b;//返回类型是a类型与b类型中的最高类型

这个说的对,如果有这样的代码:short a = a + 1;这句编译时会报错,因为a+1以后,类型强制转换为int,这是在赋值给short类型的a就错了,但是short a=1; a+=1;就不会报错+……
以前见到过,后来又忘记了,复习一下 --------------------编程问答-------------------- 其实这是一个很有价值的问题,提醒我们学习的时候多注意细节。细节太多,大家一起发现,一起注意吧。谢谢楼主,一个好问题,学习了。 --------------------编程问答-------------------- 我感觉没有问题,结果一样的 --------------------编程问答-------------------- 没有啥区别... --------------------编程问答-------------------- 前者会自动转型,后者不会,会抛出编译错误。 --------------------编程问答--------------------   这个是有区别的,关键要看类型的,比如 short 还是int 。这个很关键,疏忽了这点可能会报错的。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,