黑马程序员技术交流社区
标题:
好大一个疑问!求围观!
[打印本页]
作者:
班顶超
时间:
2012-6-5 14:50
标题:
好大一个疑问!求围观!
代码段1-----------------------------------------------------------------------------------------------------------------------
byte b = 100;
b = b + 100;
Console.WriteLine(b);
Console.ReadKey();
代码段2-----------------------------------------------------------------------------------------------------------------------
byte b = 100;
b +=100;
Console.WriteLine(b);
Console.ReadKey();
请问以上的两断代码有何区别?
如果不放在VS上运行,你能说出他们的打印结果吗?
作者:
朱亮辉
时间:
2012-6-5 16:36
本帖最后由 朱亮辉 于 2012-6-6 09:29 编辑
打印结果都是200 你声明的是byte而100是int类型的,不强制转化可以生成成功吗?
解释:
1、b = b + 100;//会复制一个b的副本执行+100操作执行完之后将新值从新复制给b
2、b +=100;//自身直接进行+100操作,并没有复制副本操作
多余的解释:
1、值类型操作一般内存会复制一个副本进行操作(值类型的数据类型在编译之前已经确认大小,一般是16字节),而引用类型一般只是改变引用地址(运行的时候才知道大小的)
2、数据量小的时候一般选用值类型,并不会引起太大的内存操作,数据量大的时候就不行了,一般使用的是引用类型,只是复制一个内存地址
声明:此是个人根据所知道的知识理解,欢迎高手拍砖进行讨论!
另附地址一枚http://www.cnblogs.com/siqing99/archive/2012/04/03/2430918.html
作者:
刘豪
时间:
2012-6-5 22:40
第一,下面的代码执行效率更高
第二, b = b + 100有语法错误,无法强制转换,编译是不能通过的, 但是b +=100可以,能自动将b转换成int行,结果是200.
但是这样做你的计算结果很可能会溢出,超出了byte能表示的范围,结果不可预测,最好不要这样用,不安全。
作者:
许庭洲
时间:
2012-6-6 10:01
b = b + 100和b +=100的功能一样,都是对 b进行同样的加100操作,但由于b是字节类型的变量,还需将100转化为字节类型才能与 b进行算术运算,所以b = b + 100有语法错误,该行无法强制转换,程序编译是不能通过的,b +=100可以编译运行,能自动将b转换成整数类型,程序输出结果是200。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2