【发布时间】:2009-08-18 13:42:42
【问题描述】:
抱歉,代码有点长,但我需要找到正确的场景。
为什么这段代码会输出所有'C'的?
import java.util.Hashtable;
public class Main {
public static ContainsTheHash containsthehash = new ContainsTheHash();
public static StoresValues storesvalues = new StoresValues();
public static GetsValuesAndPrints getsvaluesandprints = new GetsValuesAndPrints();
public static void main(String[] args) {}
}
class ContainsTheHash {
Hashtable script_code = new Hashtable();
public Contains_The_Hash() {};
public void put(long key, Script_Hash_Type sht){script_code.put(key, sht);}
public ScriptHashType get(long key){return (Script_Hash_Type)script_code.get(key);}
}
class ScriptHashType {
String string;
public ScriptHashType(){}
public String getstring () {return string;}
public void setstring(String str){string = str;}
}
class StoresValues {
public StoresValues(){
put();
}
public void put(){
ScriptHashType sht = new ScriptHashType();
sht.setstring("A");
Main.contains_the_hash.put(1,sht);
sht.setstring("B");
Main.contains_the_hash.put(2,sht);
sht.setstring("C");
Main.contains_the_hash.put(3,sht);
}
}
class GetsValuesAndPrints {
public GetsValuesAndPrints(){
//should print "A\n B\n C\n"
long temp = 1;
System.out.println(get(temp));
temp = 2;
System.out.println(get(temp));
temp = 3;
System.out.println(get(temp));
};
public String get(long key){
return new String(((Script_Hash_Type)Main.contains_the_hash.get(key)).getstring());
}
}
【问题讨论】:
-
这可能是因为你的 containsthehash 对象是静态的,所以你只有一个实例。所以当你setString时,这是C。但是你的代码不是很清楚
-
此代码无法编译(Script_Hash_Type 和 ScriptHashType 以及 Contains_The_Hash 和 ContainsTheHas 之间存在混淆)。你能先清理一下这个例子吗?
-
我认为 LB 是对的,问题是您只使用了 ContainsTheHash 的一个实例。
标签: java scope hashmap hashtable