JAVA中对JTextField对象的值的获取操作,为啥注释的部分没有效果呢?难道有啥错误么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中对JTextField对象的值的获取操作,为啥注释的部分没有效果呢?难道有啥错误么?相关的知识,希望对你有一定的参考价值。
//UserField、PassField均为JTextField对象!
String str1 = UserField.getText();
String str2 = PassField.getText();
// if (UserField.getText() == "jackson")
// System.out.println(UserField.getText());
// UserField.setText(null);
//
// if (PassField.getText() == "123")
// System.out.println("Please Coming");
// UserField.setText(null);
// PassField.setText(null);
//
//
if (str1.equals("jackson"))
System.out.println(str1);
UserField.setText(null);
if (str2.equals("123"))
System.out.println(str2);
PassField.setText(null);
在jave中==比较的的是2个对象的内存地址
如果没有overrid equals方法的话,它和“==”是一样的,当然,String类中对于equals进行了override,
看JDK源码可以知道,equals方法先会对字符串的长度进行比较,如果长度相同,则再对每个character作==运算
if (this == anObject)
return true;
if (anObject instanceof String)
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count)
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0)
if (v1[i++] != v2[j++])
return false;
return true;
return false;
public int hashCode()
int h = hash;
int len = count;
if (h == 0 && len > 0)
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++)
h = 31*h + val[off++];
hash = h;
return h;
在来,看下JTextField的源码,可以看到,getText的实现是这样的
【以下是从JDK1.6中截取的部分源码片段】
public String getText()
Document doc = getDocument();
String txt;
try
txt = doc.getText(0, doc.getLength());
catch (BadLocationException e)
txt = null;
return txt;
//这段代码是doc.getText的实现
public String getText(int offset, int length) throws BadLocationException
if (length < 0)
throw new BadLocationException("Length must be positive", length);
String str = data.getString(offset, length);
return str;
//这段代码是data.getString(offset,length)的实现
public String getString(int where, int len) throws BadLocationException
if (where + len > count)
throw new BadLocationException("Invalid range", count);
return new String(data, where, len);
最终可以看到,返回的结果是new String(data,where,len);,到此也可以很明显看到getText返回的字符串和"123"是两个不同的实例,因此==得到的必然是false
PS: 关于String a = new String("123"); 和 String a = "123"; 这2条语句的不同已经是一个老生常谈的问题了,此处就不说明了。
追问JDK源码?怎么样可以看到呢?
追答在JDK的安装目录下有src.zip,可以解出来看看。另外的话使用eclipse也可以查看到源代码(可能需要作关联)
参考技术A String 的 == 应该写 equals函数 而不是简单的====只有数字类型的 才可以用..
String的都是equals 参考技术B 字符串的比较要用equals 吧 不能用== 的 参考技术C if (PassField.getText() == "123") 用 equals
以上是关于JAVA中对JTextField对象的值的获取操作,为啥注释的部分没有效果呢?难道有啥错误么?的主要内容,如果未能解决你的问题,请参考以下文章
单击提交后如何在带有java bean值的JTextField上设置文本