java 类型转换
来源:互联网 发布:淘宝布头论斤卖 编辑:程序博客网 时间:2024/06/03 19:19
我们经常会遇到java中类型转换的问题,如父类子类之间的类型转换、基本数据类型之间的转换[int->double,double->float]等等。之所以写这篇文章是因为这几天遇到一段类型转换的代码(错误的,运行时异常):
List<Integer> tempList = new ArrayList<Integer>();tempList.add(12);tempList.add(13);Integer tempInt[] = (Integer[]) tempList.toArray();//obj.toArray() 返回Object[]
异常信息:[Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
看到这里感觉没什么稀奇,我们再看如下代码(运行没有任何错误):
Object objInt = 12;int aInt =(Integer)objInt;
好吧,我的问题来了:
1.基本类型之间的转换可以正常过进行,引用类型之间却不行,为什么?
2.基本类型之间的转换造成的数据丢失说明什么?
回答第一个问题:
在java中 int tempInt[]={12,12,.. },这是意味着赋值操作,解释的深层次来说就是内存中一个指针指向一块存储了数组的内存地址。
确切的说,Object[] 是不能转化为任何实际类型的数组的,因为对java 来说根类Object 可以是任何类型的父类。在语法检查的层次上,Object强制类型转换为任何其他类型都是通过的。但在运行中,Object 的内存存储是不认得,因为Object 可以是任何类型。如下代码:
Object[] objArr={12,"12",'12'};Integer tempInt[] = (Integer[])objArr;
回答第二个问题:
先看一段代码:
1.double b=12.56;2.int a=(int)b;3.System.out.println(a+"--"+b);输出:12--12.56
对于了解java 内部存储机制的人来说这很好理解。第2行代码代表的是赋值操作,即开辟一块内存存储int 类型的a, 值为12。而0.56则被略去。
综述:java 类型转换的实质是由其在内存中的存储结构决定的。
0 0
- java类型转换与强制类型转换
- java 类型转换 强制类型转换
- java类型转换与强制类型转换
- java中的类型转换
- java中的类型转换
- java的类型转换
- java的类型转换
- JAVA类型转换
- java中类型转换
- JAVA类型转换
- JAVA 类型转换
- JAVA的类型转换
- java时间类型转换
- java 类型转换
- java中的类型转换
- java类型转换
- java json 类型转换
- Java类型转换
- iOS使用的一些库 原理分析
- 【android】IntentService
- PyQt5 - QWidgets部件进阶教程之字符映射表
- 看看异常
- ftell、fread、fseek、feof 详细的使用介绍与注意细节
- java 类型转换
- Gstreamer框架中使用gst-launch进行流媒体播放
- 欢迎使用CSDN-markdown编辑器
- Java并发
- 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X
- Http头介绍:Expires,Cache-Control,Last-Modified,ETag
- display:table-cell的常见应用场景
- LeetCode 203. Remove Linked List Elements
- 高效显示Bitmap(一) 高效加载大图