这可能是一个简单的答案,但我想知道细节。
public Sprite buttonDown;
public Sprite buttonUp;
void OnMouseDown() {
SpriteRenderer sr = gameObject.GetComponent<SpriteRenderer>();
sr.sprite = buttonDown;
}
void OnMouseUp () {
SpriteRenderer sr = gameObject.GetComponent<SpriteRenderer>();
sr.sprite = buttonUp;
Application.LoadLevel(1);
}
在上面的示例中,缩小转换正常工作但参考转换相同无效。细节解释非常值得注意。
答案 0 :(得分:2)
您可以将float
强制转换为int
s,但不能将包装器对象强制转换为其他类型。您必须首先打开Float
包装器,然后将原始float
转换为int
。
Java将自动使用box / unbox原语及其包装类型,java也会自动扩展原始类型。但它不会同时做到这两点。
答案 1 :(得分:2)
让我们看一下字节码的详细信息。使用javap -c
查看字节代码。
代码
float ff = Integer.INT_MAX;
int ii = (int)ff;
编译到
0: ldc #3 // float 2.14748365E9f
2: fstore_1
3: fload_1
4: f2i
5: istore_2
如果是原始类型转换,正如您从字节码中看到的那样,编译器会插入f2i
。 (如第4行所示)。
另一方面,如果使用包装类,则编译器不会插入任何类型转换指令。
这就是你无法施放它们的原因。