对数据库而言,其识别一条记录的唯一性的方式是根据主键值,如果有两条记录,它们拥有同样的主键值,则它们在数据库中代表同一字段的记录。
对
java而言要识别两个对象是否为同一对象有两种方式
1.内存地址识别(“==”号识别)。
2.根据equals()、hashCode()中的定义识别。
<div class="article-info-box">
<div class="article-bar-top d-flex">
<span class="time">2018年05月29日 21:59:58</span>
<div class="float-right">
<span class="read-count">阅读数:683</span>
</div>
</div>
</div>
<article>
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/htmledit_views-0a60691e80.css">
<div class="htmledit_views">
<div style="text-align:left;"><span style="color:rgb(51,51,51);font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;font-size:14px;background-color:rgb(255,255,255);">对数据库而言,其识别一条记录的唯一性的方式是根据主键值,如果有两条记录,它们拥有同样的主键值,则它们在数据库中代表同一字段的记录。</span></div><div style="text-align:left;"><span style="color:rgb(51,51,51);font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;font-size:14px;background-color:rgb(255,255,255);">对</span><span style="background-color:rgb(255,255,255);font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;text-align:justify;">java而言要识别两个对象是否为同一对象有两种方式 </span></div><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">1.内存地址识别(“==”号识别)。 <br></p><p>2.根据equals()、hashCode()中的定义识别。</p><p><span style="font-size:14px;"><span style="color:rgb(51,51,51);background-color:rgb(255,255,255);">==是判断两个变量或实例是不是指向同一个内存空间 </span><br style="color:rgb(51,51,51);background-color:rgb(255,255,255);"><span style="color:rgb(51,51,51);background-color:rgb(255,255,255);">equals是判断两个变量或实例所指向的内存空间的值是不是相同 </span><br style="color:rgb(51,51,51);background-color:rgb(255,255,255);"><span style="color:rgb(51,51,51);background-color:rgb(255,255,255);">也就是说== 判断是你比较值的地址 而equals比较的是你两个数值是否相等。</span></span><br></p><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">在hibernate中,如果在同一session中根据相同查询所得到的相同记录,则它们会有相同的内存地址。但是如果是不同的session中查询的相同记录,它们的内存地址就会不同。因此,使用“==”来比较两条记录是否代表数据库中的同一记录是不可行的。如果有必要比较通过查询后的内容是否相同,必须重写equals()与hashCode()方法。</p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 499px; top: 596px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 499px; top: 596px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> User { </span></span></li><li class=""><span> <span class="keyword">private</span><span> </span><span class="keyword">int</span><span> id; </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> String username; </span></span></li><li class=""><span> <span class="keyword">private</span><span> String password; </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">int</span><span> age; </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">int</span><span> getId() { </span></span></li><li class=""><span> <span class="keyword">return</span><span> id; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setId(</span><span class="keyword">int</span><span> id) { </span></span></li><li class=""><span> <span class="keyword">this</span><span>.id = id; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">public</span><span> String getUsername() { </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">return</span><span> username; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setUsername(String username) { </span></span></li><li class="alt"><span> <span class="keyword">this</span><span>.username = username; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">public</span><span> String getPassword() { </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> password; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setPassword(String password) { </span></span></li><li class="alt"><span> <span class="keyword">this</span><span>.password = password; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">int</span><span> getAge() { </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> age; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setAge(</span><span class="keyword">int</span><span> age) { </span></span></li><li class="alt"><span> <span class="keyword">this</span><span>.age = age; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">boolean</span><span> equals(Object otherObject) { </span></span></li><li class=""><span> <span class="comment">// 判断内存地址是否相同</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (</span><span class="keyword">this</span><span> == otherObject) { </span></span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span></span></li><li class="alt"><span> } <span class="keyword">else</span><span> { </span></span></li><li class=""><span> <span class="comment">// 判断是否为User对象</span><span> </span></span></li><li class="alt"><span> <span class="keyword">if</span><span> (!(otherObject </span><span class="keyword">instanceof</span><span> User)) </span></span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> User user = (User) otherObject; </span></li><li class="alt"><span> <span class="comment">// 判断各个属性值是否相同</span><span> </span></span></li><li class=""><span> <span class="keyword">if</span><span> (id == user.id && username.equals(user.username) && password.equals(user.password) && age == user.age) { </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">int</span><span> hashCode() { </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> result; </span></span></li><li class=""><span> result = username.hashCode() + password.hashCode(); </span></li><li class="alt"><span> result = <span class="number">29</span><span> * age + result; </span></span></li><li class=""><span> <span class="keyword">return</span><span> result; </span></span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span>} </span></li></ol></div><pre class="java" name="code" style="display: none;">public class User {
private int id;
private String username;
private String password;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object otherObject) {
// 判断内存地址是否相同
if (this == otherObject) {
return true;
} else {
// 判断是否为User对象
if (!(otherObject instanceof User))
return false;
}
User user = (User) otherObject;
// 判断各个属性值是否相同
if (id == user.id && username.equals(user.username) && password.equals(user.password) && age == user.age) {
return true;
}
return false;
}
@Override
public int hashCode() {
int result;
result = username.hashCode() + password.hashCode();
result = 29 * age + result;
return result;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
}