日期:2014-05-20  浏览次数:20673 次

请问JAVA中,什么时候该强制类型转换?
请问JAVA中,什么时候该强制类型转换?

------解决方案--------------------
返回值为父类 需求值为子类
------解决方案--------------------
反回类性不一致时,需转换

------解决方案--------------------
当返回类型不一致的时候需要强制转换。

例如:从集合中取值的时候,因为集合中的值都是Object类型的。我们要根据需要转成String类型等。
------解决方案--------------------
类型是从上往下时,就要强制类型转换
------解决方案--------------------
Java code

1. 父类转化为子类时需要。
A extend B.

那么:B = A(子类赋值给父类,不需要)
  A = (A)B 此时需要

2. 基本数据的长数据变为短数据类型时。
char -> byte -> short -> int   -> long 此顺序不需要强转,相反则需要。
                  |       |       |
                      -> float -> double

------解决方案--------------------
返回值为父类 需求值为子类

这位已经说得蛮明确了
------解决方案--------------------
根据类型看 ,short int long float double 的字符长度不同。如果把int类型的值付给short类型 由于int的长度大于short 所以就会有数据丢失。这时就需要强制转换,反之short转int则不用 因为int的内存长度能放下short的值
------解决方案--------------------
这位童鞋基础太差
------解决方案--------------------
1.自动类型转换:低级别的类型向高级别的类型会自动转化;例如:int 向 double会自动执行 类型提升将int变 为double;
2.强制类型转换:double变为int类型,会向下转型,会精度损失。

1.显示类型转换:就是强制类型转换,就是用明确的转换类型声明。
2.隐式类型转换:就是自动转换。

这里仅仅是从基本数据类型,简单说明一下,引用类型的思想也是这样,但是引用类型的转换要确保是同一体系的对象。
------解决方案--------------------
自动类型转换:当一个子类型的要被父类型的引用时,这时就会自动类型转换,举个例子:
int i=100; 
double=i+10;//这时就i就自动转换了double类型了称为隐式类型转换
而如果是这样:
double pi=3.1415926;
int i=pi;//这时编译会出错,说类型不兼容,就需要强制类型转换了,也成显式类型转换
应该这样写:
int i=(int)pi;
在我们写Java类的时候,肯定会使用到Java面向对象的三大特性,那么在这个过程中就会涉及到类型转换的问题,比如:
当我们编写了Employee类(员工类),PM类(项目经理类),SE(程序员类),PM和SE分别是Employee的子类。当我们需要把它们的一些对象存储在集合中时,比如,我创建了一个ArrayList集合对象:
List<?> employeeList=new ArrayList<?>();那你说我的泛型应该写什么,写PM还是SE呢,都不行!这时,只有把泛型的类型声明为它们俩的父类了,这就自动转型了,也称为(向上转型),当我们需要访问某个具体子类的时候,这时有会用到强制类型转换,因为一个被父类引用的子类是无法访问子类特有的方法的:代码:
PM pm1=employeeList.get(0);//这样会报错
正确的代码是:
PM pm1=(PM)employeeList.get(0);
写了这么多,不知道你是更晕了,还是明白了。
------解决方案--------------------
我想说的是强转是针对自动转换而言的,这是基础,如果不能自动转换,而我们又需要将某种类型的对象变成我们需要的另一种对象时就要使用强转了,那是不是类型之间都可以强转呢?当然不是:
类型强制转换必须发生在具有父子类关系的类型之间,而且强转必须保证是还原!!!
举个例子:
房子类是别墅类的父类,(class House;class Bieshu extends House)
别墅是房子吧:House house = new Bieshu();这个逻辑在现实中成立,在java中也成立;
但是反过来就不一定了,房子不一定就是别墅,可能是别的啥(土房,草房,棚户...)
这种就有问题:
Bieshu bieshu = new House();就会犯错!!!,此时必须用类型强转了(因为两者都是房子,可能会成功)
Bieshu bieshu = (Bieshu)(new House());//编译没问题,运行有问题,因为转换没有保证还原
强制类型转换:
子类的引用指向父类的实例(引用)时必须强转,而且被指向的实例必须和子类的保持一致,说白了,强转就是还原子类型的实例引用
------解决方案--------------------
1. byte short char int long float double数据类型之间的转换 - -
2. byte short char 他们三者之间是不能进行数据类型的转换,他们三者在进行运算的时候,只能先转换为int-> 然后才能进行运算
3. 如果是两个不同数据类型的数据之间运算,运算的结果将转换为高一级的数据类型:
例如:int a=1; double b=2.0;
int c=(int)(a+b);//需要加一个强制转换,因为int(4个字节)a+ double(8个字节)b;自动向高一级的类型转换
double d=a+b;//不需要加转换符
4. short char byte 之间在进行运算的时候,他们三者之间是不能进行相互转换的,他们在进行运算时,先转换为int型,接着在进行相应的运算