java强制类型转换:Java的强制类型转换

今晚项目几个同学有次有关Java强制类型转换讨论,当时脑袋瓜浑浑,现在理下思路.

用个例子:

view plaincopy to clipboardpr?
public animal
{
private age;
private String color;

public void eat {}
}
public animal
{
private age;
private String color;

public void eat {}
}

view plaincopy to clipboardpr?
public dog extends animal
{
private String _disibledevent=>
再举个例子:

view plaincopy to clipboardpr?
human{ sum;}
man extends human
{
double sum;
public void (String args)
{
human a= man;
man b= man;
b=(man)a;
}
}
human{ sum;}
man extends human
{
double sum;
public void (String args)
{
human a= man;
man b= man;
b=(man)a;
}
}



可以把“人”强制转换成“男人”吗??很显然不能
所谓“父类向子类转换是强制转换”是指这种情况
human a= man;
man b=(man)a;
此时a实际上是个man例子但被定义为human这样就无法man中定义思路方法只有在强制转换为man例子后才能B中定义思路方法——前提:a是man例子. 这里做个备注: 这会不会是小田迷惑那个问题所在?回头再想想
如果是
human a= human;
man b= man;
b=(human)a;
a本身是human例子不具有B特征使不能转换为B例子
这就像你不能
Object obj= Object;
String str = (String)obj;

个问题.强制类型转换有时会造成精度下降,这在数值转换里面常见.

举例如下:

view plaincopy to clipboardpr?
public test
{
public void (String args)
{
// TODO Auto-generated method stub
i = 123;
double d = 1.23;

double ToDouble = (double)i;
doubleToInt = ()d;

.out.prln(ToDouble);
.out.prln(doubleToInt);
}
}
public test
{
public void (String args)
{
// TODO Auto-generated method stub
i = 123;
double d = 1.23;

double ToDouble = (double)i;
doubleToInt = ()d;

.out.prln(ToDouble);
.out.prln(doubleToInt);
}
}

输出结果如下:

123.0
1

可以看到,在由double转类型时,对数据进行了截断,造成了数据丢失或者说精度下降,这在非刻意需求情况下,是需要避免进行类似强制转换.这种转换编译器不报错,如果非coder本意,查错时会很难发现,所以尽量避免.

今晚犯了个,认为double不能转,实际是可以.其他问题,现在理理,其实思路都是对.不过当时思路不清,搞不清楚他们想说什么,自己也解释不清自己思路,脑袋瓜慢慢就浑了... 唉,其实整个后半天脑袋瓜都不在状态了,以后不能再空腹喝咖啡了,想体验茶醉兄弟可以试试,心惶惶还亢奋,不爽,极为不爽.
Tags:  c语言强制类型转换 java类型转换 强制类型转换 java强制类型转换

延伸阅读

最新评论

发表评论