由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 请教 class cast problem
相关主题
Java Regular Expression Question问一个关于access object instance的问题
return null or empty list/set/...如何造Array of Generic Type
Java里面有没有可能写个带generic parameter的class对built-in type也适用?Why HttpServletRequest extends Object implements ServletRequest
请问有没有generic的array[合集] 问一下这个cast在java里是怎么work的
java 的函数 xxx(a, b,c)能够向a 写入数据吗?请教一个动态cast的问题
问个primitive type的问题EJB2 Question
annotation一问,如何在编译时处理自定义annotation1 quick interview question
Java练习题 12what is your opinion in this case?
相关话题的讨论汇总
话题: int话题: object话题: array话题: 编译话题: cast
进入Java版参与讨论
1 (共1页)
Q****r
发帖数: 7340
1
int [][] a ={{1,2}, {2,3}};
Object o = a;
int b = (int []) o;
编译能通过,但是有ClassCastException在第三句
不能理解,为什么能够编译通过?
如果是
int [][] a ={{1,2}, {2,3}};
Object o = a;
int b = (int []) a;
编译就不能通过了,在第三句。这个很容易理解。
F****n
发帖数: 3271
2

~~~~~~~~~~~~~~~~~~~~~~~~~~
Are you sure it's not int[] b = (int[])o;

【在 Q****r 的大作中提到】
: int [][] a ={{1,2}, {2,3}};
: Object o = a;
: int b = (int []) o;
: 编译能通过,但是有ClassCastException在第三句
: 不能理解,为什么能够编译通过?
: 如果是
: int [][] a ={{1,2}, {2,3}};
: Object o = a;
: int b = (int []) a;
: 编译就不能通过了,在第三句。这个很容易理解。

Q****r
发帖数: 7340
3
谢谢,提醒,已经改了

【在 F****n 的大作中提到】
:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~
: Are you sure it's not int[] b = (int[])o;

F****n
发帖数: 3271
4
Then it's obvious, an object can be a primitive array,
but an "array of primitive array" (which is actually an object array) can
never be a primitive array.

【在 Q****r 的大作中提到】
: 谢谢,提醒,已经改了
e********3
发帖数: 18578
5
因为OOP的三要素之一的polymorphism,java 编译器只会在乎一个变量被申明成什么
type,而不考虑等号右边的赋值语句,那是jvm runtime运行时候才看得东西,所以java
编译器不能判定o在runtime是不是int[] type,因为o被declare是object,所以可能是
任何type,但是会给出class casting warning message.而运行的时候,o实际上是int[
][] type,不能cast到int[],所以jvm会throw一个RuntimeException/
ClassCastException,注意看naming, runtime exception,已经说明了它的含义。
第二个编译不能过,是因为a被declare了为int[][] type,所以java编译器可以确定a一
定是int[][](int[][]没有子类),不能被cast成int[],所以会给出编译错误。

【在 Q****r 的大作中提到】
: int [][] a ={{1,2}, {2,3}};
: Object o = a;
: int b = (int []) o;
: 编译能通过,但是有ClassCastException在第三句
: 不能理解,为什么能够编译通过?
: 如果是
: int [][] a ={{1,2}, {2,3}};
: Object o = a;
: int b = (int []) a;
: 编译就不能通过了,在第三句。这个很容易理解。

Q****r
发帖数: 7340
6
谢谢阿,很详细

java
int[

【在 e********3 的大作中提到】
: 因为OOP的三要素之一的polymorphism,java 编译器只会在乎一个变量被申明成什么
: type,而不考虑等号右边的赋值语句,那是jvm runtime运行时候才看得东西,所以java
: 编译器不能判定o在runtime是不是int[] type,因为o被declare是object,所以可能是
: 任何type,但是会给出class casting warning message.而运行的时候,o实际上是int[
: ][] type,不能cast到int[],所以jvm会throw一个RuntimeException/
: ClassCastException,注意看naming, runtime exception,已经说明了它的含义。
: 第二个编译不能过,是因为a被declare了为int[][] type,所以java编译器可以确定a一
: 定是int[][](int[][]没有子类),不能被cast成int[],所以会给出编译错误。

1 (共1页)
进入Java版参与讨论
相关主题
what is your opinion in this case?java 的函数 xxx(a, b,c)能够向a 写入数据吗?
对 spring 的 exception 处理方式真是不适应问个primitive type的问题
EJB ConnectionFactory issueannotation一问,如何在编译时处理自定义annotation
what's inside an java object?Java练习题 12
Java Regular Expression Question问一个关于access object instance的问题
return null or empty list/set/...如何造Array of Generic Type
Java里面有没有可能写个带generic parameter的class对built-in type也适用?Why HttpServletRequest extends Object implements ServletRequest
请问有没有generic的array[合集] 问一下这个cast在java里是怎么work的
相关话题的讨论汇总
话题: int话题: object话题: array话题: 编译话题: cast