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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© べPNヤ 中级黑马   /  2013-8-11 19:51  /  3495 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 べPNヤ 于 2013-8-11 22:29 编辑

int 类型是4字节 double  类型是 8字节,知道可以转换 但是还有点不明白 这个长的数据类型为什么可以转换成比它短的?如果 long类型转换成 float类型呢? 会损失精度吗?

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

6 个回复

正序浏览
java数据类型的转换一般分三种,分别是:
(1). 简单数据类型之间的转换

    在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)--int--long--float--double


简单数据类型之间的转换又可以分为:
  ●低级到高级的自动类型转换
  ●高级到低级的强制类型转换
  ●包装类过渡类型能够转换



低级变量可以直接转换为高级变量,笔者称之为自动类型转换,例如,下面的语句可以在Java中直接通过:
    byte b;
    int i=b;
    long l=b;
    float f=b;
    double d=b;

如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如r
    char c='c';
    int i=c;
    System.out.println("output:" i);
输出:output:99;


对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。
    short i=99;

    char c=(char)i;

    System.out.println("output:" c);
输出:output:c;


但根据笔者的经验,byte,short,int三种类型都是整型,因此如果操作整型数据时,最好统一使用int型。



将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。即你必须采用下面这种语句格式:
    int i=99;

    byte b=(byte)i;

    char c=(char)i;

    float f=(float)i;
可以想象,这种转换肯定可能会导致溢出或精度的下降,因此笔者并不推荐使用这种转换。


1、float型转换为double型:

float f1=100.00f;
Float F1=new Float(f1);

//F1.doubleValue()为Float类的返回double值型的方法
double d1=F1.doubleValue();



2、double型转换为int型:

double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();



3、int型转换为double型:

int i1=200;
double d1=i1;

回复 使用道具 举报
graspDN 发表于 2013-8-11 22:11
今天老师刚讲过哈哈:是这样的,double转成int是:除去符号位,即从次高位开始往下数32位,截取,假如为正数 ...

有道理,截取的时候是从符号位后边开始截取的
回复 使用道具 举报
又看了下老师的视频个人觉得是这样:double转换成int 是强制转换,强制转换可以把字节高的转换成字节低的,但是字节高的如果超出低字节的值范围 转换后的值会与以前的值没关系,long转换成float应该不会损失精度,因为float的内存表示方法不一样 其表示范围比long 大 不会损失精度, 希望高手指点下
回复 使用道具 举报
今天老师刚讲过哈哈:是这样的,double转成int是:除去符号位,即从次高位开始往下数32位,截取,假如为正数,如果截取的都是0,精度不会损失,截取的32位中含1就会损失精度,long转float是先对long进行变形,变成float型数据的表示形式(long和float的表示形式是不一样的),long转成float是不会损失精度的,因为float的表示范围比long大。long表示的数,float肯定是能表示的。
回复 使用道具 举报 1 0
把double类型赋值给int类型的时候,因为可以会损失精度,所以不给赋值,编译就会出错; 如果用强制转换,就是不管里面值是多少强制转换成int类型,就像楼上说的好比把一个木棍砍断只留一部分。
回复 使用道具 举报
转换成比它短的数据类型的时候,自己砍掉后面的部分就可以了的。就好比把一个木棍砍断只留一部分就可以了。这只是我的理解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马