黑马程序员技术交流社区

标题: 基础视屏中的一个纰漏 [打印本页]

作者: 贺靖轩    时间: 2013-3-28 19:50
标题: 基础视屏中的一个纰漏
黑马程序员_毕向东_JAVA基础视频第02天-08-类型转换.avi 中 在9分20S左右 毕老师举了这么一个例子:
当Int 类型的数据与 Float类型数据 进行运算的时候,结果会转换为 Float 类型的数据,这里毕老爷讲得有点太激情了,所以出了点小差错。
——根据虚拟机的设定在自动类型提升后最终会转换成Double类型的数据。
具体细节大家补齐吧,目前正在赶进度,时间不太充裕。
作者: 谢波    时间: 2013-3-28 20:57
{:soso_e127:}Int 类型的数据与 Float类型数据 进行运算的时候,结果的确是会转换为 Float 类型的数据哦
作者: 刘凯    时间: 2013-3-28 21:00
这个貌似就是转换成Float好吧,,   这个问什么要提升???
作者: 薛飞    时间: 2013-3-28 21:06
本帖最后由 薛飞 于 2013-3-28 21:07 编辑

{:soso_e127:}int+float=float,这个没问题啊,没出错啊。这个不符合自动提升的条件啊,为什么要自动提升为double,楼主把大家搞晕了
作者: 曹宇    时间: 2013-3-28 21:09
在我所知道的东西里面 也是 符合int+float=float   额 对于楼主所说的 在JVM 里面的啥啥啥会提升到 double  
还希望有大神出来解答一下,很好奇。
作者: 董霁辉    时间: 2013-3-28 21:43
基本数据类型,类型自动转换是当2个或2个以上基本数据类型运算时 低的自动转换为高的,然后再进行运算,如:int+float=float 过程是,int先自动转换为float,然后再与float运算。并非楼主想的那样子。本例中未涉及到Double,那么最终数据类型为float。毕老师木有讲错的。
作者: 陈丽莉    时间: 2013-3-28 21:52
若还有问题,请继续追问; 没有的话,将帖子分类改成【已解决】哦~
作者: 赵喜平    时间: 2013-3-28 22:20
楼主  int + float= float,貌似木有错,求解
作者: Keith    时间: 2013-3-28 22:34
byte,short,char->int->float->double
byte,short,char之间不会互相互换,他们三者在计算时首先转换成int类型
作者: 贺靖轩    时间: 2013-3-29 08:57
呵呵 经过大家一番讨论 我终于明了
有码有真相:
引处引用芦青马马的证据:
class Demo
{      
        public static void main(String[] args)
        {
                int a=6;
                float f=3.3f;
      
                float i=a+f;
                System.out.print(i);
        }
      
}

根据代码的运算情况:Int 类型的数据与 Float类型数据进行运算的时候,最终是能用float接受的..如果是double类型,赋值会损失精度的..你在好好理解下毕老师的类型转换吧

哈哈 我又中枪了 关于这个问题

byte,short,char->int->float->double
byte,short,char之间不会互相互换,他们三者在计算时首先转换成int类型 是可以套用的规律,引用9#。

恩 问题大概是解决了 楼主最近也是压力比较大 下面由楼主来演示下为何会得出开始时的结论,“剑指毕老爷”。
楼主的测试关键代码如下:

a.    int i=6;
b.    float f=i+0.3;
c.    System.out.print(f);

相信大家现在已经看猫腻了,对吧? 不可轻视了 l f 这样看似微末的东东。

0.3在这里未加f,则表示其是一个double类型的数据,
int 类型的 i  同double 类型的0.3运算,结果铁定是double类型的了

楼主是那种很抠的人 那么在引用类型中 上面的问题会有怎样的表现?

Integer i=new Integer(6);
f=new Float(6+0.3);
System.out.println(f);

请问 f=new Float(6+0.3); 中,(6+0.3)是什么类型?
我一切错误的根源大概就在这里
此为Float封装类的构造方法

public Float(double value)
{
        this.value = (float)value;
}

相信大家一看就明白了
(6+0.3)铁定是Double类型了
写这个看似啰嗦的情况是为了再次提醒大家和自己
不会忽略
      那些
细枝末节{:soso_e136:}

作者: 贺靖轩    时间: 2013-3-29 12:00
陈丽莉 发表于 2013-3-28 21:52
若还有问题,请继续追问; 没有的话,将帖子分类改成【已解决】哦~

亲   ... 找不到 【已解决】
作者: 黄玉昆    时间: 2013-3-29 13:02
贺靖轩 发表于 2013-3-29 12:00
亲   ... 找不到 【已解决】

http://bbs.itheima.com/thread-42978-1-1.html
亲,这里有相关解决办法哦




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