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.对方能够按照事先约定好的序列号给我发送数据。从人和人的角度来说,需要建立一个彼此信任的基础