源码猎人 2011-01-05 15:13 采纳率: 0%
浏览 207
已采纳

java为什么可以类型转换

这是一个空绕我很久的问题。为什么可以类型转换?两个类可以类型转化的必要条件是什么?转换时内存空间如何发生转变?

  • 写回答

4条回答 默认 最新

  • hermit1216 2011-01-05 15:30
    关注

    一、简单数据类型间的转换
    两种数据类型相互转换首先要类型兼容。根据目的数据类型的范围与原数据类型的范围,将类型转换分自动类型转换(放大转换)和强制类型转换(缩小转换)。
    举一个例子:把一个小的东西放到一个大的盒子里,是件非常容易的事,不用做任何改变,在这里理解成自动转换。若把一个大的东西放到一个小的盒子,那就要对这个东西做些舍弃,加工一下,强制把它放进小盒子里,可理解成强制类型转换。
    byte->short->int->long->float->double
    这样的顺序是属于放大且自动类型转换,反过来就属于缩小且强制类型转换。

    类型转换发生的时机:
    1)赋值运算
    2)算术运算
    3)方法调用
    自动类型转换举例(int类型自动转换成float类型):
    int i=7;
    float j=1.0f;
    float sum=i+j;//返回8.0
    强制类型转换举例(float类型强制转换成int类型):
    int i=2;

    float j=1.0f;
    int sum=(int)(i+j);//返回3
    注:char可以自动类型转换成int。
    二、字符串与其它数据类型的转换
    1)从Integer类对象中把数据以int类型取出方法有两个:类级别的“parseInt”、对象级别的“intValue”。intValue不需要任何参数,直接调用,前提必须有Integer类对象。 如只想把字符串类型的数字转换成int类型数字,可以直接使用parseInt方法。
    intValue方法可以用来取得Integer对象所存放的int数值,也可以通过类似的方法来转换其他的基本数据类型,boolean,char除外。byte,short,long,float,double分别对应方法byteValue,shortValue,longValue,floatValue,doubleValue。

    举例:String->int
    Integer s = new Integer(str);
    int s1=s.intValue();

      int s1=Integer.parseInt(str);
    

    2)和parseInt相反的是"toString"这个方法,这个方法是对象级别的,即将对象转换成字符串。当使"+"运算符将对象同一字符串连接,Java编译器会自动调用"toString"方法。
    举例:int->String
    Integer.toString(10);//返回10
    另外一个类似方法,object.valueOf( ) 方法,它返回的是Integer对象。
    举例:int->String
    int a = 12345;
    String b = String.valueOf(a);//返回12345
    三、类与类之间的类型转换
    类与类之间的转换只能用在父子类上,不能用在兄弟类,更不能用在根本不相关的两个类之间。子类转换成父类属于自动类型转换,父类转换成子类属强制类型转换。

    再补充一个例子:
    1 class A {
    2 void sum(double a, double b) {
    3 System.out.println("a + b = " + (a + b));
    4 }
    5 }
    6
    7 class B {
    8 public static void main(String args[]) {
    9 A ob = new A();
    10 ob.sum(10, 20);// 两个int型参数
    11 }
    12 }

    程序输出:
    a + b = 30.0

    这里说明在方法调用时发生自动类型转换。A中定义sum(double,double),我在B中调用sum(int,int)方法,但A中不存在此方法。所以Java 将int型扩大到double型,然后调用sum(double,double) 。当然,如果A中定义了sum(int,int) ,当然会调用sum(int,int),而不会调用sum(double,double) 。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?