【實(shí)例描述】
在登錄一些網(wǎng)站時(shí),我們需要輸入用戶(hù)名和密碼。也許時(shí)間久了你就會(huì)忘記所設(shè)的密碼,這時(shí)我們可以請(qǐng)求該網(wǎng)站將密碼發(fā)到注冊(cè)時(shí)的郵箱。這就需要判斷用戶(hù)輸入的用戶(hù)名是否正確,我們可以通過(guò)對(duì)比用戶(hù)輸入的用戶(hù)名字符串是否與數(shù)據(jù)庫(kù)中或者已經(jīng)存在的集合中的字符串相同,來(lái)決定用戶(hù)輸入的用戶(hù)名是否正確。實(shí)例的運(yùn)行效果如圖4.1 所示。
【實(shí)現(xiàn)過(guò)程】
在Eclipse 中新建項(xiàng)目Username,并在其中創(chuàng)建一個(gè)Username.java
文件。在該類(lèi)的主方法中創(chuàng)建標(biāo)準(zhǔn)輸入流的掃描器對(duì)象,接收用戶(hù)輸入變量值。然后判斷輸入值,如果不是管理員用戶(hù)名并且輸入的用戶(hù)名是已經(jīng)注冊(cè)的則顯示正確提示,否則顯示錯(cuò)誤提示。核心代碼如下所示:
protected
void do_button_actionPerformed(ActionEvent e) {
String name =
usernameField.getText(); // 獲取用戶(hù)輸入
if (name.equals("admin")) { //
判斷是否管理員賬號(hào)
showMessageDialog(null, "對(duì)不起,這個(gè)用戶(hù)名是管理員的,不是你的");
} else if
(name.equals("Lester")) { // 判斷是否注冊(cè)用戶(hù)
showMessageDialog(null,
"該用戶(hù)名對(duì)應(yīng)的密碼已經(jīng)發(fā)送到注冊(cè)時(shí)的郵箱,請(qǐng)查收
");
} else { //
給錯(cuò)誤用戶(hù)名的提示對(duì)話(huà)
框
showMessageDialog(null, "你輸入的用戶(hù)名不存在,留意Caps Lock
鍵是否按下。
");
}
}
【代碼解析】
本實(shí)例采用了String
類(lèi)的equals()方法來(lái)判斷兩個(gè)字符串的內(nèi)容是否相同,這個(gè)方法是從Object 類(lèi)中繼承的。在Java 語(yǔ)言中,默認(rèn)的所有類(lèi)都是Object
的子類(lèi),也就是說(shuō)只要是對(duì)象,都會(huì)重寫(xiě)或直接使用Object 類(lèi)的equals()方法,String
類(lèi)就重寫(xiě)了這個(gè)方法實(shí)現(xiàn)判斷字符串內(nèi)容是否相同的目的。其聲明語(yǔ)法如下:
public boolean equals(Object
anObject);
【知識(shí)擴(kuò)展】
在Java 虛擬機(jī)中有一個(gè)保存字符串的池,它會(huì)記錄所有的字符串。例如:
String str1=”abc”;
String
str2=”abc”;
String str3=new
String(”abc”);
System.out.println(str1==str2);
System.out.println(str1==str3);
這段代碼中str1==str2
的判斷將返回true,而str1==str3 將返回false。因?yàn)镴ava
中基本數(shù)據(jù)類(lèi)型使用“==”可以判斷操作數(shù)是否相等,對(duì)于對(duì)象使用這個(gè)符號(hào)判斷的是兩個(gè)對(duì)象的內(nèi)存地址是否相同。如果字符串已經(jīng)存在,就不在創(chuàng)建相同的字符串,直接返回該字符串,所以這兩個(gè)變量引用的是同一個(gè)字符串,那么它們的地址也是相同的,所以str1==str2
成立,但是使
用new 關(guān)鍵字創(chuàng)建的字符串會(huì)開(kāi)辟內(nèi)存控件,所以str1==str3 不成立。