小编Ker*_*eph的帖子

为什么Netbeans以它的方式生成hashCode()?

我已经用Netbeans开发了一段时间的Java,并且有些事情我只是依赖于工作而没有真正质疑如何.其中包括自动生成的hashCode()和equals()方法.

equals方法很容易遵循,但我发现hashCode方法有些神秘.我不明白为什么它选择乘数并应用它所做的操作.

import java.util.Arrays;
import java.util.Objects;

public class Foo {

    int id;
    String bar;
    byte[] things;

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + this.id;
        hash = 89 * hash + Objects.hashCode(this.bar);
        hash = 89 * hash + Arrays.hashCode(this.things);
        return hash;
    }    
}
Run Code Online (Sandbox Code Playgroud)

搜索文档,这个网站和谷歌搜索"netbeans生成哈希码"之类的内容,似乎没有任何相关内容.有谁在这里熟悉这一代策略是什么以及为什么Netbeans使用它?

编辑:
感谢您的答案到目前为止!特别是由于对链接的SO问题的这个答案,我理解现在更充分地使用素数来设计hashCode方法的逻辑.然而,到目前为止我没有真正解决的问题的另一个方面是Netbeans如何以及为什么选择它为其生成的方法所做的素数.的hash字段,另一个乘法器(89在我的例子)似乎取决于类的各种因素是不同的.

例如,如果我String在类中添加第二个,则hashCode()变为

public int hashCode() {
    int hash = 7;
    hash = 13 * hash + this.id;
    hash = 13 …
Run Code Online (Sandbox Code Playgroud)

java netbeans hashcode

14
推荐指数
1
解决办法
3193
查看次数

如何在创建新表时添加外键?

我有这两个CREATE TABLE陈述:

CREATE TABLE GUEST (
  id int(15) not null auto_increment PRIMARY KEY,
  GuestName char(25) not null
);

CREATE TABLE PAYMENT (
  id int(15) not null auto_increment
  Foreign Key(id) references GUEST(id),
  BillNr int(15) not null
);
Run Code Online (Sandbox Code Playgroud)

第二个陈述中的问题是什么?它没有创建一个新表.

mysql create-table

10
推荐指数
3
解决办法
3万
查看次数

Java RMI,在创建注册表时已经使用的端口

在Java工作了很多年之后,我第一次在RMI中弄湿了,我正在按照本教程来了解基础知识.下面的服务器代码给出了以下异常,说端口1099已经在使用,但是查看netstat -ano的输出(在Windows上),没有进程正在使用1099.我可以用任何其他未使用的端口替换1099并且它按预期工作,我的客户端程序能够成功连接.

我搜索了一会儿,这是我能找到有同样问题的人最接近的东西,但他似乎找到了netstat的违规过程,我不能.

我正在Netbeans中开发,无论是通过Netbeans运行还是自己执行JAR,我都会遇到同样的异常.我没有像他似乎正在做的那样从命令提示符启动注册表,但这似乎没有必要,因为如果我只是改变端口号,一切都会好的.

我在这里错过了什么?

服务器代码:

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class RMIServer {

    public static void main(String[] args) throws InterruptedException {
        try {
            LocateRegistry.createRegistry(1099);
            Naming.rebind("//localhost:1099/MyRemote", new MyRemote());
            System.out.println("Server ready.");
        } catch (Exception ex) {

            System.out.println("Server error:");
            ex.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例外:

Server error:
java.rmi.server.ExportException: Port already in use: 1099; nested exception is: 
    java.net.BindException: Address already in use: JVM_Bind
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:328)
    at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:236)
    at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
    at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
    at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:207)
    at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:122)
    at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:108)
    at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
    at …
Run Code Online (Sandbox Code Playgroud)

java port tcp rmi netbeans-7

7
推荐指数
0
解决办法
2万
查看次数

标签 统计

java ×2

create-table ×1

hashcode ×1

mysql ×1

netbeans ×1

netbeans-7 ×1

port ×1

rmi ×1

tcp ×1