我正在尝试向 LinkedHashMap 添加一个元素。 LHM 中的每个条目都是一个键和一个名为 Page 的类。
我写了这段代码:
public void addPage(Page<byte[]> addPage)
{
if(numOfPages < initialCapacity) // Checks that there is room
{
pages.put(new java.lang.Long(addPage.hashCode()), addPage);
numOfPages++;
}
}
它似乎可以工作并且没有给出任何错误。
但我不明白为什么:
public void addPage(Page<byte[]> addPage)
{
if(numOfPages < initialCapacity) // Checks that there is room
{
pages.put(java.lang.Long(addPage.hashCode()), addPage);
numOfPages++;
}
}
不起作用。为什么我实际上必须创建一个 Long
的新实例,而不是仅仅将从 hashCode 返回的 int 转换为 Long ?看起来很浪费。
编辑 - 类页面:
public class Page<T>
{
private T content;
private java.lang.Long pageId;
public Page(java.lang.Long pageId, T content)
{
this.pageId = pageId;
this.content = content;
}
public java.lang.Long getPageId()
{
return pageId;
}
public void setPageId(java.lang.Long pageId)
{
this.pageId = pageId;
}
public T getContent()
{
return content;
}
public void setContent(T content)
{
this.content = content;
}
public boolean equals(Page<T> page)
{
if(this.pageId == page.getPageId())
return true;
return false;
}
}
最佳答案
这里的“类型转换”只是向您隐藏对象创建,因此它同样有效。
我倾向于这样写:(long) addPage.hashCode()
,它将被编译到自动装箱中,这将(在几乎所有情况下)分配一个新的 Long
无论如何都反对。
或者,您可以写 Long.valueOf(addPage.hashCode())
这将使装箱变得明确,但会缓存小 hashCode
值。
关于java - 我必须创建 Long 实例才能将 Long 作为参数发送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36208191/