自动转换: 举一个例子:把一个小的东西放到一个大的盒子里,是件非常容易的事,不用做任何改变,在这里理解成自动转换。若把一个大的东西放到一个小的盒子,那就要对这个东西做些舍弃,加工一下,强制把它放进小盒子里,可理解成强制类型转换。
byte->short->int->long->float->double
<wbr></wbr>
如果要把一个大类型塞到小类型中去,就要进行强制转换。
<wbr></wbr>
类型转换发生的时机:
1)赋值运算
2)算术运算
3)方法调用
自动类型转换举例(int类型自动转换成float类型):
<wbr><wbr><wbr><wbr>int i=7;<br><wbr><wbr><wbr> float j=1.0f;<br><wbr><wbr><wbr> float sum=i+j;//返回8.0<br> 强制类型转换举例(float类型强制转换成int类型):<br><wbr><wbr><wbr><wbr> int i=2;<wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr> float j=1.0f;<br><wbr><wbr><wbr><wbr> int sum=(int)(i+j);//返回3<br> 注:char可以自动类型转换成int。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
何为兼容:只有数字类型(包括整型和浮点)兼容,数字类型和CHAR或BOOLEAN是不兼容的。CHAR和BOOLEAN不兼容。
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
二、字符串与其它数据类型的转换
1)从Integer类对象中把数据以int类型取出方法有两个:类级别的“parseInt”、对象级别的“intValue”。intValue不需要任何参数,直接调用,前提必须有Integer类对象。<wbr>如只想把字符串类型的数字转换成int类型数字,可以直接使用parseInt方法。<br><wbr><wbr><wbr>intValue方法可以用来取得Integer对象所存放的int数值,也可以通过类似的方法来转换其他的基本数据类型,boolean,char除外。byte,short,long,float,double分别对应方法byteValue,shortValue,longValue,floatValue,doubleValue。<br><br> 举例:String->int<br><wbr><wbr><wbr><wbr><wbr><wbr>Integer s = new Integer(str);<br><wbr><wbr><wbr><wbr><wbr><wbr>int s1=s.intValue();<br><br><wbr><wbr><wbr><wbr><wbr><wbr>int s1=Integer.parseInt(str);<br><br> 2)和parseInt相反的是"toString"这个方法,这个方法是对象级别的,即将对象转换成字符串。当使"+"运算符将对象同一字符串连接,Java编译器会自动调用"toString"方法。<br> 举例:int->String<br><wbr><wbr><wbr><wbr><wbr><wbr>Integer.toString(10);//返回10<br> 另外一个类似方法,object.valueOf( ) 方法,它返回的是Integer对象。<br> 举例:int->String<br><wbr><wbr><wbr><wbr><wbr><wbr>int a = 12345;<br><wbr><wbr><wbr><wbr><wbr> String b = String.valueOf(a);//返回12345<br><b>三、类与类之间的类型转换</b><br> 类与类之间的转换只能用在父子类上,不能用在兄弟类,更不能用在根本不相关的两个类之间。子类转换成父类属于自动类型转换,父类转换成子类属强制类型转换。<br><br> 再补充一个例子:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr>1<wbr>class<wbr>A<wbr>{<br><wbr>2<wbr><wbr><wbr><wbr><wbr>void<wbr>sum(double<wbr>a,<wbr>double<wbr>b)<wbr>{<br><wbr>3<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>System.out.println("a<wbr>+<wbr>b<wbr>=<wbr>"<wbr>+<wbr>(a<wbr>+<wbr>b));<br><wbr>4<wbr><wbr><wbr><wbr><wbr>}<br><wbr>5<wbr>}<br><wbr>6<wbr><br><wbr>7<wbr>class<wbr>B<wbr>{<br><wbr>8<wbr><wbr><wbr><wbr><wbr>public<wbr>static<wbr>void<wbr>main(String<wbr>args[])<wbr>{<br><wbr>9<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>A<wbr>ob<wbr>=<wbr>new<wbr>A();<br> 10<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ob.sum(10,<wbr>20);//<wbr>两个int型参数<br> 11<wbr><wbr><wbr><wbr><wbr>}<br> 12<wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
程序输出:
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) 。
热门内容