王垠 一道 Java 面试题
- flowerszhong
http://www.yinwang.org/blog-cn/2020/02/13/java-type-system
关于程序员对 Java 类型系统的理解,比较高级的一个面试问题是这样:
public static void f() { String[] a = new String[2]; Object[] b = a; a[0] = "hi"; b[1] = Integer.valueOf(42);}
这段代码里面到底哪一行错了?为什么?
如果某个 Java 版本能顺利运行这段代码,那么如何让这个错误暴露得更致命一些?注意这里所谓的「错了」是本质上,原理上的,而不一定是 Java 编译器,IDE 或者运行时报给你的。
也就是说,你用的 Java 实现,IDE 都可能是错的,没找对真正错误的地方,或者没告诉你真正的原因。
如果你知道哪里错了,并且知道「为什么」错了,可以联系我。 - jn13lh联系他能得到啥。。。。
跟他一起绝世而独立吗。? - kkzxak47他自己变成自己敌人了
- kurt_yan第二行错了 Object[]与String[]是不同的类型 其实例不能互相赋值 iOS fly ~
- flowerszhong回复4#kurt_yan请联系垠神
- 某雷估计是招人了
- lovedzc奖励5.12美元,必须比高德纳要多一倍奖金。
- jn13lh回复4#kurt_yan
不懂编程。只从逻辑上看的话。我感觉第五行更奇怪一点。。。倒不是说正整数赋值给数组中的一个有啥问题。而是。。。b到底是个啥。这样赋值结果会是啥。
不过我都不懂编程了。在这说啥呢。。。 - 郭德纲有答案了吗?
- sonybp最后一行错了。在Object[] b = a;的时候,b已经成为String[]实例了。则在最后一行不能接受Integer类型。
- zjy1993作为一个大学自学过 谭浩强C语言 的半吊子爱好者,我要说,这段代码应该应该是直接被编译器优化掉了,什么错都不会报的吧?
- Haisea我试了,编译可以通过, 运行时调用f()会出错
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
Java的运行时异常 - 寒冰炫Integer前加一个String.valueOf(或者""+可破
- songco最后一行类型错误.
这个问题就不好回答了: 如果某个 Java 版本能顺利运行这段代码,那么如何让这个错误暴露得更致命一些?
这问题描述很奇怪 - jckimi
- songco不过按他问题的意思应该是 Object[] b = a; 就错了
可能真要去hw - zjy1993
- 大马他刚说了永不去hw
- lumi据说他在编译器方向经验丰富
- x8blaze非Java从业者,object是所有类的父类,第二行没有错。第二行中指向string类型最后一行赋值的是integer预计会遇到运行时错误。暴露类型错误可以强转b[1]为string
- zhenyue第五行在逻辑上是错的,为啥要这么写
第五行,在编译器上,低版本不支持拆箱和封箱会报错,高版本支持,不会报错
所以 - 77880099