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