Java强制实现

时间:2011-05-04 16:22:26

标签: java casting jvm

我知道如何在Java中使用cast,但有一个更具体的问题;你能不能向我解释一下铸件是如何工作的(在记忆中)?

  • 如何在向上转换和向下转换时更改变量类型?

  • JVM如何知道将此方法发送到此对象是安全的?

提前谢谢。

4 个答案:

答案 0 :(得分:3)

此问题的已接受答案的可能重复: How does the Java cast operator work?

这里也有相当广泛的解释,包括所有数据类型等: http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5

答案 1 :(得分:3)

  

你能解释我的演员如何运作(在记忆中)吗?

它在字节代码级别工作,而不是真正在内存中

  

如何在向上转换和向下转换时更改变量类型?

如果它是带有特殊字节码指令的原语,例如从长到整数,如:

long l = ...
int i = ( int ) l;

字节码为:l2i if是带有checkcast

指令的引用
  

JVM如何知道从这时起将此方法发送到此对象是否安全?

它没有,它尝试在运行时执行它,如果失败则抛出异常。

写作是合法的:

String s = ( String ) new Date();

答案 2 :(得分:1)

所有基元的转换都是在寄存器中完成的(像大多数操作一样)对于基元,在许多情况下,当向下转换低位时,为了向上转换,符号被扩展。有边缘情况但你通常不需要知道它们是什么。


upcasting / downcasting引用的工作方式相同,因为它检查实际对象是您所投射类型的实例。你可以投射既不是向上投射也不是向下投射。

e.g。

 Number n = 1;
 Comparable c = (Comparable) n; // Number and Comparable are unrelated.
 Serializable s = (Serializable) c; // Serializable and Comparable are unrelated.

答案 3 :(得分:0)

如果你对jvn关于演员阵容工作的内部运作感兴趣,你也可以查看jvm spec http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#25611