java - 我必须创建 Long 实例才能将 Long 作为参数发送吗?

标签 java oop memory casting

我正在尝试向 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/

相关文章:

java - Spring MVC 页面到页面导航不起作用

面向对象的 JavaWorld : Getters/Setters vs Builder

c++ - 智能指针和不可复制的成员字段

c++ - 从两个阵列的点积测量内存带宽

c++ - 具有密集和稀疏指针的分配器 - 发生了什么事?

r - Advanced R 中修改列表的示例

java - 在android中同步联系人信息中的应用程序 Logo

java - Hibernate GenerationType.IDENTITY 与 GenerationType.SEQUENCE

java - System.getenv() 返回\

android - DBAdapter设计问题