It's our wits that make us men.

面试题

Posted on By eatMelon-Masses

1.== 和 equals的区别是什么?

==解读

基础类型

比较的是值是否相等

引用类型

比较的是引用是否相等

示例代码

      int a = 0;
      int b = 0;
       //0-128整数是被缓存到内存当中
       Integer integer = 0;
       Integer integer1 = new Integer(0);
       System.out.println(a==b);//true
       System.out.println(integer==integer1);//false
       System.out.println(integer.equals(integer1)); //true

equals解读

Object.equals()

   public boolean equals(Object obj) {
        return (this == obj);
    }

本质上就是==比较 只不过 Integer 和 String重写了equals

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (!COMPACT_STRINGS || this.coder == aString.coder) {
                return StringLatin1.equals(value, aString.value);
            }
        }
        return false;
    }

2.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对

3.为什么tcp 握手需要3次,2次不可以?

网上大多数解释都是,tcp需要确认发送方和接收方的序列号。

但是实际上会产生疑问,为啥一定要确认呢?不确认不行,如果对方收到序列号就一定会使用该序列号呀?

这就要从tcp协议的特点来说,tcp协议时面向连接的可靠传输协议,那么就意味着,对于发送方和接受方来说,只有收到对方的序列号,才能确认1.对方的包能够发送给我2.对方能够按照事先约定好的序列号给我发送数据。从人和人的角度来说,需要建立一个彼此信任的基础