我接受了java中的向上转换和向下转换的概念,这也被称为扩展和缩小。
好的,我得到了概念和一切。但是,它在这种情况下如何运作?
public class ObjPair {
Object first;
Object second;
public ObjPair(Object first, Object second) {
this.first = first;
this.second = second;
}
public Object getFirst() {
return first;
}
public Object getSecond() {
return second;
}
public static void main(String[] args) {
ObjPair objPair = new ObjPair("A",2.2); // Goes widning conversion
System.out.println(objPair.getFirst());
System.out.println(objPair.getSecond());
}
}
ObjPair objPair =新的ObjPair(" A",2.2);
现在,当我做 objPair.getFirst()和 objPair.getSecond()时。它返回 A 和 2.2 。
答案 0 :(得分:4)
对象引用的转换不更改对象。它只是允许将其分配给不同类型的引用。对象本身保持不变。
在您的情况下,它需要两个Object
引用,它检查兼容性(没有问题),然后引用在类型Object
的变量中设置。实例本身不会改变。如果他们的方法覆盖Object
的方法,那么将调用重写方法。
因此,当它涉及打印对象的部分时,它只使用String.valueOf
,它调用对象的toString()
方法。从Object
变量访问的实例实际上是String
对象,而String
会覆盖toString()
以返回自身。 Double
也会覆盖toString
。调用这些覆盖,因为实例仍然是String
的实例和Double
的实例。只有参考是Object
。
请注意,您还有double
到Double
的演员阵容。这个隐式装箱会更改对象 - 它需要一个原语并从中创建一个新的Double
。
答案 1 :(得分:1)
请注意:内存中的对象 它是什么。如果你创建了一个Double对象,那么它就是一个类似于数值的Double对象。
保存引用的变量使用超类型的事实根本不会影响引用的对象!
在您的示例中,自动装箱会在封面下创建一个Double对象,update your_table set cus_flag = 1
where cus_category like '%expansion%' and cus_category like '%exisitng%';
update your_table set cus_flag = 0
where cus_category like '%cleared%' and cus_category like '%former%';
会返回对该 Double 对象的引用。
这就是全部。
答案 2 :(得分:0)
好的,就是这样,让我们举一个例子。你有一个大方框,名为Object和另一个小盒子。如果你把这个小盒子放在你的大盒子里面,小盒子和大盒子的所有属性都在大盒子里。 然后在小盒子里面有两根棍子,你把第一根棍子标记为'A',第二根棍子标记为'2.2'。 现在大盒子可以看到小盒子里面的东西。现在,在那一瞬间,小盒子有两根棍子,并按照它们的方式标记。 (记住Object类始终是java中每个类的超类/父级。)
答案 3 :(得分:0)
如果您只是测试此代码:
public class Main {
public Object first;
public Object second;
public static void main (String[] args){
Main a = new Main();
a.first = new String("foo");
a.second = 5;
System.out.println(a.first.getClass().toString());
}
}
输出class java.lang.String
。您可以看到它没有存储为Object
。这是通过使用元数据来实现的。