黑马程序员技术交流社区

标题: 初学java,有些难点混淆不清 [打印本页]

作者: 沐阳6011    时间: 2014-5-24 18:01
标题: 初学java,有些难点混淆不清
本帖最后由 沐阳6011 于 2014-5-25 20:53 编辑

:loveliness::loveliness:若定义一个变量 byte  a=4;  a=a+4;   编译时会提示出错,具体的原因是什么呢,如果面试时,面试官提问,自己也组织不太好语言,是因为基础不扎实的缘故吗?:dizzy:还有a=a+4  与  a+=4 的区别?感觉自己可能基础还是不太扎实,求解答:dizzy::dizzy::#
作者: 沐阳6011    时间: 2014-5-24 20:18
求解释啊?:dizzy:
作者: 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里所以的变量都有数据类型,这里的这句代码等号左边是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要高
作者: 李彦来    时间: 2014-5-25 08:18
毕向东老师的视频里有啊,第二天的视频08号视频,类型转换
作者: More    时间: 2014-5-25 08:28
强制类型转换存在损失精度的问题
作者: 塔罗    时间: 2014-5-25 08:57
在用变量进行计算时,编译的时候像byte、char、等类型的数据会进行类型自动转成 int类型。int类型+byte类的数据时就会得到一个int类型的数据。所以编译会报错。 至于 b+=4; 相当于b=(byte)(b+4). 强制类型转化为byte所以不编译的时候不会报错。
作者: 沐阳6011    时间: 2014-5-25 15:25
Dark_Horse 发表于 2014-5-24 21:25
a=a+4运算结果是整型,需要强制类型转换为bytel类型a=(byte) ((byte)a+4);这样会损失精度
默认转换是:容量 ...

谢谢你,我会再好好努力的
作者: 沐阳6011    时间: 2014-5-25 15:31
shi980088 发表于 2014-5-24 23:39
我一点一点给你解毒,首先是第一个代码byte  a=4; 在java里所以的变量都有数据类型,这里的这句代码等号左 ...

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

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

多学多练没捷径
作者: 沐阳6011    时间: 2014-5-25 15:48
shi980088 发表于 2014-5-25 15:45
多学多练没捷径

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

:#这么夸我我会不好意思的,你自学的java?
作者: 沐阳6011    时间: 2014-5-25 16:04
shi980088 发表于 2014-5-25 15:51
这么夸我我会不好意思的,你自学的java?

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

:funk:我还没过测试呢
作者: 沐阳6011    时间: 2014-5-25 20:51
李彦来 发表于 2014-5-25 08:18
毕向东老师的视频里有啊,第二天的视频08号视频,类型转换

听了几遍还是有点儿蒙,不过回头自己琢磨琢磨就明白了,嘿嘿
作者: 沐阳6011    时间: 2014-5-25 20:52
shi980088 发表于 2014-5-25 20:43
我还没过测试呢

什么?基础测试吗?那你技术分是怎么赚的?:funk:
作者: shi980088    时间: 2014-5-25 21:09
沐阳6011 发表于 2014-5-25 20:52
什么?基础测试吗?那你技术分是怎么赚的?

嗯,我基础测试还没答题呢,我回答问题吖
作者: 沐阳6011    时间: 2014-5-25 21:28
shi980088 发表于 2014-5-25 21:09
嗯,我基础测试还没答题呢,我回答问题吖

我也得抓紧了,好好复习下,好好写写技术博客,感觉着技术分不好拿啊
作者: shi980088    时间: 2014-5-25 21:30
沐阳6011 发表于 2014-5-25 21:28
我也得抓紧了,好好复习下,好好写写技术博客,感觉着技术分不好拿啊

还好吧,认真回答问题就好了
作者: 沐阳6011    时间: 2014-5-25 21:39
shi980088 发表于 2014-5-25 21:30
还好吧,认真回答问题就好了

行,这点我得向你学习,最近一个多月还是好好打基础了,哥们一起加油吧!:D
作者: 墓____夜    时间: 2014-5-26 23:20
首先 byte a=4 ,  它是把默认int数据类型4赋值给byte类型 a ,属于自动转型。
其次 a=a+4,      中 a是变量, 一个变量a 加上4 再赋值给变量a,这是不对的,改正 :byte a=(byte)(a+4) ;这是强制转换。
而a+=4,    等同于a=byte(a+4) ,不过a+4 在JDK中 会自动  进行强制转换。
作者: chensc    时间: 2014-5-30 08:07
学习学习!
作者: chensc    时间: 2014-6-11 08:13
学习学习!
作者: chensc    时间: 2014-7-9 12:38
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2