A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 班顶超 中级黑马   /  2012-6-5 14:50  /  1747 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  代码段1-----------------------------------------------------------------------------------------------------------------------
  byte b = 100;
  b = b + 100;
  Console.WriteLine(b);
  Console.ReadKey();
  代码段2-----------------------------------------------------------------------------------------------------------------------
  byte b = 100;
  b +=100;
  Console.WriteLine(b);
  Console.ReadKey();

请问以上的两断代码有何区别?
如果不放在VS上运行,你能说出他们的打印结果吗?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 朱亮辉 于 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

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
第一,下面的代码执行效率更高
第二, b = b + 100有语法错误,无法强制转换,编译是不能通过的, 但是b +=100可以,能自动将b转换成int行,结果是200.
但是这样做你的计算结果很可能会溢出,超出了byte能表示的范围,结果不可预测,最好不要这样用,不安全。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
b = b + 100和b +=100的功能一样,都是对 b进行同样的加100操作,但由于b是字节类型的变量,还需将100转化为字节类型才能与 b进行算术运算,所以b = b + 100有语法错误,该行无法强制转换,程序编译是不能通过的,b +=100可以编译运行,能自动将b转换成整数类型,程序输出结果是200。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马