黑马程序员技术交流社区

标题: 【已解决】基础数据类型转换的疑问 [打印本页]

作者: 郑文博    时间: 2012-6-5 21:12
标题: 【已解决】基础数据类型转换的疑问
本帖最后由 郑文博 于 2012-6-6 08:16 编辑

今天翻看之前的练习,产生了疑问。
应该是没有学牢固,还请大家帮个忙。
  1. /*
  2.         java基础数据类型转换应用示例
  3. */
  4. public class Test4{

  5.         public static void main(String[]args){
  6.                 int a=100;
  7.                 long l=a;

  8.                 System.out.println(l);

  9.                 long d=500000000000L;
  10.                 short s=(short)d;
  11.                 System.out.println(s);
  12.         }
  13. }
复制代码
第13行 short s=(short)d; 运行后输出结果为什么是-30720? 主要请教 long转short是怎么转的,谢谢。

----------------------------------------编辑后分隔-----------------------------------------------

在此非常感谢大家给的帮助。
作者: 刘蕴学    时间: 2012-6-5 21:27
以00000000 00000000 10000000 00000000为一个int来看,强转为short之后就是10000000 00000000,long也一样,前方多余的位会被舍弃,只保留最低的16位,而16位为1的话,这个short就会是负数
作者: 李春阳    时间: 2012-6-5 21:31
Java简单数据类型之间的转换有其规则:

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

不同级别间互相转的转换机制如下:
1、自动类型转换
   低级变量可以直接转换为高级变量,称之为自动类型转换。
例如低级类型char型,向高级类型int型转换时,会转换为对应ASCII码值:
比如char型的字母A,会转为int型的数字65。

2、强制类型转换
  将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。
但是需要注意格式:

int i=0;
byte b=(byte)i;
char c=(char)i;
float f=(float)i;
在变量前加一个括弧,里面写上强制转换的目标型。
这种转换肯定可能会导致溢出或精度的下降,不推荐使用这种转换。

楼主就是这样转的啦~当然会错误了~

3、包装类过渡类型转换
   在我们讨论其它变量类型之间的相互转换时,我们需要了解一下Java的包装类。
所谓包装类,就是可以直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。
Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,
               分别对应于 boolean、char、     int、    long、float和double。
而String和Date本身就是类。所以也就不存在什么包装类的概念了。
   在进行简单数据类型之间的转换(自动转换或强制转换)时,我们总是可以利用包装类进行中间过渡。
   一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:
4、字符串型与其它数据类型的转换
    通过查阅类库中各个类提供的成员方法可以看到的,这个一查就知道啦~

作者: 张洁    时间: 2012-6-5 21:35
lz要注意基本数据类型之间的转换是有的,long是不能转换成short的
规则:(这个一定要记住哦~~)
1、boolean类型不可转换
2、容量小的类型自动转换成容量大的类型
         byte, short, char -> int -> long -> float -> double  
      byte, short, char之间是不会相互转换的

byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)

short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)

int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)

long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1
3、容量大得类型转换成小的要加强制转化符,但可能溢出,使用时需要小心
4、实数默认为double ,整数默认为int。






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