① java中的强制类型转换
用(String)做强制类型转换和用String.valueOf()区别在于:
String 就是直接强制转化成String型的字符串,且有优先级限制,像int i=123;不能String s=(String)i。
而String.valueOf()里面的参数转换可以是double、long、char[] 、long等等,没限制,所以String s=String.valueOf(i)。
toString()方法返回的是这个对象的字符串表示,就像是这个对象的名字一样,任何对象都可以有自己的名字,你可以重写其toString()方法,给其赋予任意的名字。
但是调用toString()方法的对象不能为 null,否则会抛出异常:java.lang.NullPointerException。
例子如下:
(1)java强转类型扩展阅读:
java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。
在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。
因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。
当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。
在Java中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可以行了。
举个例子来说明。比如系统中存在Father、Son两个对象。首先我们先构造一个Son对象,然后用一个Father类型变量引用它:
Father father = new Son();
在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!
Son son = (Son)father;
这条语句是可行的,其实father引用仍然是Father类型的,只不过是将它的能力加强了,将其加强后转交给son引用了,Son对象实例在son的变量的引用下,恢复真身,可以使用全部功能了。
前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?
当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:
Father father = new Father();
Son son = (Son) father;
这个系统会抛出ClassCastException异常信息。
所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。
所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败
② Java强制数据类型转换
规则可不少,挺乱的其实:
强制数据类型转换: int nowC = (int)c;
还可以这样,使用intValue方法,返回一个int值:
Double d = 5 / 9.0 * (f - 32);
int nowC = d.intValue();
Double类是基本数据类型double所对应的包装类。
基本数据类型转换的规则:
Java中基本数据类型共有8种,其中boolean类型不能转换为其它类型,其它类型也不能转换为boolean型
除了boolean类型,还有7种,按照它们的容量(也就是表数范围,就是能表示的数的大小范围,比如char是0——65535)的大小,从小到大,排序依次为:
byte short char int long float double
1.容量小的向容量大的转换,可以自动转换,比如可以直接将一个int类型赋值给double:
double d = 34;
2.容量大的向容量小的转换,必须强制类型转换,就是你上面的那种形式,比如:
double c = 5/9.0 *(f - 32);
int nowC = (int)c;
3.整数类型常量默认为int类型,比如17
4.浮点类型常量默认为double类型,比如3.14
5.在多种数据类型混合运算时,容量小的自动转换为整个表达式中容量最大的,然后再进行计算,比如:
int i = 9; float f = 4f; double d = 3.14; double dd = i+f+d;
此时,i和f都各自先转换成double,在进行+运算。
6.在多种数据类型混合运算时,byte short char 3者不会互相转换,他们各自转换为int再进行计算
7.在有些时候,容量小的会自动提升为容量大的,比如方法重载传参数时候,
但是byte 和 short 不会自动提升为char,其它类型按照我上面所述的顺序提升。
差不多就这些,不明白补充,另外需要注意的是强转虽然编译没问题,但是运行时,有可能会数据溢出,损失精度
③ JAVA如何进行强制类型转换
如果这2种类型是兼容的,那么Java 将自动地进行转换。
④ Java的强制类型转换的格式,急
强制转换格式为(int)a将变量a强制转换为int型,但是转换是有条件的。数值类型只能转换为数值类型,逻辑类型boolean不能转换为数值型。如(int)true就是不对的。详细的可以参考一些网上的资料。我就不一一列举了
⑤ Java强制类型转换
原因有如下:
Object数组中可以存储int ,string, class等类型,对于计算机来说它不清楚用户最终存储的是什么类型的数据,例如可以存储:
mm[0] = new String("123");
mm[1] = new MyClass();
如果存储以上数据类型,那么你强制转换就是失败的,Object数组存储未知类型,所以无法强制转换某一固定类型的数据,强制转换就会异常。
针对Object数组中某一个具体数据进行强制转换时,可以根据存储的实际类型进行转换处理,能够正常进行,所以是正确的。
以上的说明希望你能明白。