gpt4 book ai didi

java - 我们是否转换对象或引用?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:18 29 4
gpt4 key购买 nike

我的代码是这样的:

public class Hashtabledemo2 {

public static void main(String[] args) {

Hashtable myCompay = new Hashtable(10);
System.out.println("Add some employee objects to the hashtable..");

Salary e1 = new Salary("Salary1", "Palo Alto, CA",
1, 100000.00);
Hourly e2 = new Hourly("Hourly2", "Cupertino, CA", 2, 100.00);

Contractor e3 = new Contractor("Contractor3", "Milpitas, CA",3, 1000.00);

myCompay.put(new Integer(e1.hashCode()), e1);
myCompay.put(new Integer(e2.hashCode()), e2);
myCompay.put(new Integer(e3.hashCode()), e2);

System.out.println("The size of the hashtable is "+myCompay.size());

int size = myCompay.size();

for(int i=1;i<=size;i++){
/* Note that the get() method of the hashtable class returns a reference to the object
that matches the given key:
public Object get(Object key)
*/
Employee current = (Employee) myCompay.get(new Integer(i));



if(current instanceof Hourly){
((Hourly) current).setHoursWorked(40);
} else if(current instanceof Contractor){

((Contractor) current ).setDaysWorked(5);
}
current.computePay();
current.mailCheck();

}

Salary、hourly 和 contractor 都扩展了 employee 类。在我的理解中,我们将父引用转换为子引用,而不是相反。我不明白这行代码是如何工作的:

Employee current =  (Employee) myCompay.get(new Integer(i));

这行代码用于获取存储在哈希表位置之一的对象,该对象是一个 Salary 对象。

myCompay.get(new Integer(i));

之后它被转换为 Employee:

(Employee) myCompay.get(new Integer(i));

然后赋给一个Employee引用电流:

Employee current =  (Employee) myCompay.get(new Integer(i));

有人可以向我解释一下我们是将哈希表中存储的对象 salary 转换为员工对象,然后将其分配给员工引用 current。还是将引用 e1 转换为员工引用。请有人解释发生了什么。

最佳答案

Java 中对象和引用之间的区别有些模糊,因为访问对象的唯一方法是通过引用。当您进行转换时,您会引用同一对象的不同类型。

请注意,您的代码已损坏:它使用对象的原始哈希码将对象放入哈希表中,但随后会尝试使用它们的序列号检索它们。这预计不会起作用,除非你很幸运,并且其中一个对象返回 0..3 范围内的哈希码。

关于java - 我们是否转换对象或引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31721619/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com