我double在hashmap中有一个值作为String的键.如果我将作为值添加的变量单独更新到散列映射,而不是在散列映射中更新它,则不会反映更新的值.那是当我使用键获取值时,我得到的值为0.0而不是更新的值.我无法理解为什么会这样.请详细说明一下.此外,是否有其他方法通过更新变量来更新hashmap中的值.我正在谈论的示例代码如下:
import java.util.HashMap;
public class TestDouble{
public Double d1 = 0.0;
public Double d2 = 0.0;
public Double d3 = 0.0;
private HashMap<String,Double> hm;
public TestDouble(){
hm = new HashMap<String,Double>();
hm.put("D1",d1);
hm.put("D2",d2);
hm.put("D3",d3);
}
public void updateD1(double d){
d1 = d;
}
public void updateD2(double d){
d2 = d;
}
public void updateD3(double d){
d3 = d;
}
public Double getValue(String key){
Double val = (Double)hm.get(key);
return val;
}
public static void main(String args[]){
TestDouble td =new TestDouble();
td.updateD1(10.10);
td.updateD2(20.20);
td.updateD3(30.30);
System.out.println("Value of D1 from HashMap = "+td.getValue("D1")+" from actual variable = "+td.d1);
System.out.println("Value of D2 from HashMap = "+td.getValue("D2")+" from actual variable = "+td.d2);
System.out.println("Value of D3 from HashMap = "+td.getValue("D3")+" from actual variable = "+td.d3);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
Value of D1 from HashMap = 0.0 from actual variable = 10.1
Value of D2 from HashMap = 0.0 from actual variable = 20.2
Value of D3 from HashMap = 0.0 from actual variable = 30.3
Run Code Online (Sandbox Code Playgroud)
Double是不可改变的.您无法更新其值.相反,您可以引用另一个实例Double
d1有一个参考0d:
Double d1 = 0d;
Run Code Online (Sandbox Code Playgroud)
如果我们进行另一次初始化,它将引用另一个值:
d1 = 1d;
Run Code Online (Sandbox Code Playgroud)
另一方面HashMap是可变的,即它的内部状态可以改变:
Map<String, Double> map = new HashMap<String, Double>();
map.put("first", 0d);
map.put("first", 1d);
System.out.println("first = " + map.get("first"));
Run Code Online (Sandbox Code Playgroud)
输出将是:
first = 1.00
Run Code Online (Sandbox Code Playgroud)
请记住,我们已经替换了与密钥关联的值first,但未更新.
| 归档时间: |
|
| 查看次数: |
22123 次 |
| 最近记录: |