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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沐阳6011 中级黑马   /  2014-5-24 18:01  /  4104 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沐阳6011 于 2014-5-25 20:53 编辑

:loveliness::loveliness:若定义一个变量 byte  a=4;  a=a+4;   编译时会提示出错,具体的原因是什么呢,如果面试时,面试官提问,自己也组织不太好语言,是因为基础不扎实的缘故吗?:dizzy:还有a=a+4  与  a+=4 的区别?感觉自己可能基础还是不太扎实,求解答:dizzy::dizzy::#

24 个回复

倒序浏览
求解释啊?:dizzy:
回复 使用道具 举报
a=a+4运算结果是整型,需要强制类型转换为bytel类型a=(byte) ((byte)a+4);这样会损失精度
默认转换是:容量小的类型可以转换容量大的类型                
强制转换是:容量大的类型向容量小的类型转换时候需要强制转换
第二个问题:在某种情况下是相同的,是类型不匹配的情况下,进行相加
仅是 个人理解..
回复 使用道具 举报
我一点一点给你解毒,首先是第一个代码byte  a=4; 在java里所以的变量都有数据类型,这里的这句代码等号左边是byte类型的a  右边是一个4,在java中所有的整数类型默认为int类型所以,4为int类型。既然4是int类型,int类型是占4个字节而byte占1个字节,为什么int类型的4可以赋值给byte类型的a呢,这是因为jvm(java虚拟机)中有一个自动检测,检测你等式右边的变量是不是属于byte类型,如果属于,那么可以直接赋值,如果超出这个范围,就会报错。比如说如果你这么写byte a =12345;就会报错,12345超出了byte所承受的最大取值范围。好了,然后咱们继续解答第二句话,a= a+4,在计算机中,我们读代码应该这么读,把a+4的值赋予a,既然是把a+4的值赋予a,因为a是byte类型的,4是int类型的,a+4会自动提升为int类型的,因为a是byte类型的,如果把a+4赋值给a,jvm(java虚拟机会自动判断a+4是不是属于byte的取值范围),但是a是一个变量,有不确定性,所以a=a+4会报错。   a+=4这句话中,你可以理解为a=a+4,但是a+=4这里包含了一个隐式的类型转换,也就是可以把a+=4写成a=(byte)a+4,前面说了,因为a+4是int类型的,我们要赋值给byte类型的a是不可以的,所以只能通过强制转换,而+=这个符号默认就有强转的功能,效率要比a=a+4要高

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
毕向东老师的视频里有啊,第二天的视频08号视频,类型转换
回复 使用道具 举报
强制类型转换存在损失精度的问题
回复 使用道具 举报
塔罗 中级黑马 2014-5-25 08:57:02
7#
在用变量进行计算时,编译的时候像byte、char、等类型的数据会进行类型自动转成 int类型。int类型+byte类的数据时就会得到一个int类型的数据。所以编译会报错。 至于 b+=4; 相当于b=(byte)(b+4). 强制类型转化为byte所以不编译的时候不会报错。
回复 使用道具 举报
Dark_Horse 发表于 2014-5-24 21:25
a=a+4运算结果是整型,需要强制类型转换为bytel类型a=(byte) ((byte)a+4);这样会损失精度
默认转换是:容量 ...

谢谢你,我会再好好努力的
回复 使用道具 举报
shi980088 发表于 2014-5-24 23:39
我一点一点给你解毒,首先是第一个代码byte  a=4; 在java里所以的变量都有数据类型,这里的这句代码等号左 ...

哥们你解释的很详细,很多知识点都涉及到了,非常清晰。谢谢你的回答。但是我想要可以在咱们论坛里解答问题,像你这么详细,基础怎么能打扎实呢,现在我有点感觉自己基础不太扎实,每天做笔记吗?或者说您有什么自己的方法推荐呢?
回复 使用道具 举报
More 发表于 2014-5-25 08:28
强制类型转换存在损失精度的问题

恩,是的,我看了几遍才整明白的:lol
回复 使用道具 举报
沐阳6011 发表于 2014-5-25 15:31
哥们你解释的很详细,很多知识点都涉及到了,非常清晰。谢谢你的回答。但是我想要可以在咱们论坛里解答问 ...

多学多练没捷径
回复 使用道具 举报

也不是说捷径,在这个贴回复的人,很多人可能都懂我问的这个问题,但是像你这样回答的这么详细的没有几个。这就涉及到基础和关键词,还有表达能力的问题,现在我虽然懂了,但是也不会像你这样表达的这么完善。
回复 使用道具 举报
沐阳6011 发表于 2014-5-25 15:48
也不是说捷径,在这个贴回复的人,很多人可能都懂我问的这个问题,但是像你这样回答的这么详细的没有几个 ...

:#这么夸我我会不好意思的,你自学的java?
回复 使用道具 举报
shi980088 发表于 2014-5-25 15:51
这么夸我我会不好意思的,你自学的java?

是啊,刚开始学呢。你解答的确实很好了,我有点儿望尘莫及啊,就算我自己理的清思路,可能也不会答的这么清楚,以后很多问题还希望你多多 指教了,我刚过了基础测试,现在开始写博客了
回复 使用道具 举报
沐阳6011 发表于 2014-5-25 16:04
是啊,刚开始学呢。你解答的确实很好了,我有点儿望尘莫及啊,就算我自己理的清思路,可能也不会答的这么 ...

:funk:我还没过测试呢
回复 使用道具 举报
李彦来 发表于 2014-5-25 08:18
毕向东老师的视频里有啊,第二天的视频08号视频,类型转换

听了几遍还是有点儿蒙,不过回头自己琢磨琢磨就明白了,嘿嘿
回复 使用道具 举报

什么?基础测试吗?那你技术分是怎么赚的?:funk:
回复 使用道具 举报
沐阳6011 发表于 2014-5-25 20:52
什么?基础测试吗?那你技术分是怎么赚的?

嗯,我基础测试还没答题呢,我回答问题吖
回复 使用道具 举报
shi980088 发表于 2014-5-25 21:09
嗯,我基础测试还没答题呢,我回答问题吖

我也得抓紧了,好好复习下,好好写写技术博客,感觉着技术分不好拿啊
回复 使用道具 举报
沐阳6011 发表于 2014-5-25 21:28
我也得抓紧了,好好复习下,好好写写技术博客,感觉着技术分不好拿啊

还好吧,认真回答问题就好了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马