java date20150817(上午)

来源:互联网 发布:中国储运 网络刊 编辑:程序博客网 时间:2024/04/27 22:00

数据类型转化
数据类型转化前提:相互转化的数据类型是兼容的;
数据类型转化有两种:自动类型转化和强制类型转化
--------------------------------------------------
一、自动类型转化
自动类型转化前提:相互转化的数据类型是兼容的,转换前的数据类型是低于转化后的数据类型的;
例1:public class ZiDongLeiXingZhuangHua{
 public static void main(String args[]){
            short a = 12;         //定义一个short类型变量
            int b = a;            //short自动类型转化为int类型,short是16位,int是32位的
     float c = 1.2f;       //定义一个float类型变量
     double d = c;         //float自动类型转化为double类型,float是32位,double是64位
     long m = 2345678L;    //定义一个long类型变量
     double n = m;         //long自动类型转化为double类型,其都是64位的,但double的数值范围更大,他两的数据类型表示的都是数值,
                                    所以可以相互转化,只是整型转化成浮点型数值会存在一定的误差
            int i = 13;           //int自动类型转化为float类型,其都是32位的,但float的数值范围更大,他两的数据类型表示的都是数值,
                                    所以可以相互转化,只是整型转化成浮点型数值会存在一定的误差
            float j = i;
 System.out.println("输出int数据类型:"+b);
 System.out.println("输出double数据类型:"+d);
 System.out.println("输出double数据类型:"+n);
        System.out.println("输出float数据类型:"+j);
 }
}
输出结果:
12
1.2000000476837158
2345678.0
13.0
因为字符类型是占16数据位,而且可以用Unicode码来表示,所以其可以自动转化成int、long整型数据类型,其也可以转化成float、double浮点型
例2:public class ZiDongLeiXingZhuangHua{
 public static void main(String args[]){
   char a = 'A';     //定义一个char类型变量
   int b = a;        //char自动类型转化为int类型,char是16位,int是32位的
          long c = a;       //char自动类型转化为long类型,long是64位
   float f = a;      //char自动类型转化为float类型,float是32位
   double d = a;     //char自动类型转化为double类型,double是64位
   System.out.println(a);
 System.out.println(b);
 System.out.println(c);
 System.out.println(f);
 System.out.println(d);
 }
}
输出结果:
A
65
65
65.0
65.0
-----------------------------------------------------------------------------------------------------
二、强制类型转化
强制类型转化前提:相互转化的数据类型是兼容的,转换前的数据类型要比转化后的数据类型要大;
强制类型转化是由固定格式的,格式:type 变量名 = (type)value;
注:type表示的是要强制后的数据类型,value表示的是强转前的数据类型的变量名
例1:public class QiangZhiLeiXingZhuanHua {

 public static void main(String[] args) {
  double a = 12.3d;        //定义一个double数据类型
  byte b = (byte)a;        //double强制类型转化为byte类型,double是64位,byte是8位的
  short s =(short) a;      //double强制类型转化为short类型,short是16位,byte是8位的
  int i = (int)a;          //double强制类型转化为int类型,int是32位,byte是8位的
  long l =(long) a;        //double强制类型转化为long类型,long是64位,byte是8位的
  float f =(float) a;      //double强制类型转化为float类型,float是32位,byte是8位的
  
  System.out.println(a);
  System.out.println(b);
  System.out.println(s);
  System.out.println(i);
  System.out.println(l);
  System.out.println(f);
 }
}
输出结果:
12.3
12
12
12
12
12.3
注:强制类型转化因为是数值大的数据类型转化为数值小的数据类型,所以数值太大的时候,强转时可能会造成数据的丢失;
例2:public class QiangZhiLeiXingZhuanHua {

 public static void main(String[] args) {
  char a = 'A';                //定义一个char数据类型
  int i = a + 32;              //char自动类型转化为int类型,char是16位的,int是32位
  char c1 = (char)i;           //int强制类型转化为char类型
  System.out.println(c1);      //‘A’=65,‘a’=97;
  int j = a+1;                 //定义一个int数据类型
  char c2 = (char)j;           //int强制类型转化为char类型
  System.out.println(c2);      //a(‘A’)+1=66;‘B’=66;由此可知,字符型A、B、C、、、等数值是有规律的,
 }                                        字符型a、b、c、、、等数值也是有规律的

}
输出结果:
a
B
-----------------------------------------------------------------------------------------------------
<3>隐含强制类型转化
例:byte b=123;
注:系统默认的是int类型,123表示的是int类型,但b定义的是byte类型,那为什么程序没有报错呢,因为系统有自动隐含强制转化,
    但这只针对整数型;像浮点型默认的是double类型,所以定义一个float类型的变量时,其后赋的值需加上F/f;

0 0
原创粉丝点击