2 sologgfun sologgfun 于 2015.07.19 19:59 提问

String类型的变量到底是不是字符串啊?

String k1 =f.getText(); //f是JTestField的引用。
f.getText().equals("呵呵");//呵呵是字符串,如果这样写的话返回是真。
但是如果写成k1.equals("呵呵");返回的就是假,这是为什么?求解释。

补充:
package tao ;

import java.awt.* ;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Tao{
static JTextField f = new JTextField();
static JPasswordField f1 = new JPasswordField();
public static void main(String[] args){
JFrame chat = new JFrame();
chat.setSize(300,200);
//小部件;
JButton log = new JButton("呵呵");
JButton log1 = new JButton("嘻嘻");
JButton log2 = new JButton("吼吼");
JLabel l = new JLabel("账号是什么");
JLabel l2 = new JLabel("密码又是什么");
Monitor mo = new Monitor();
log.addActionListener(mo);

//小模块;
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(2,2));
p1.add(l);
p1.add(f);
p1.add(l2);
p1.add(f1);
JPanel p2 = new JPanel();
p2.add(log);
p2.add(log1);
p2.add(log2);
//整合模块;
chat.setLayout(new GridLayout(2,1));
chat.add(p1);
chat.add(p2);
chat.setVisible(true);
}
static class Monitor implements ActionListener{
    String k1 =f.getText();

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("呵呵")){
            if(f.getText().equals("GEM")&&(String.valueOf(f1.getPassword()).equals("111111"))){
                System.exit(0);
            }

        }

    }

}

}







以上是代码,想实现的效果是输入两个制定的账号密码以后按呵呵会关闭,但是如果换成String的引用.equals就不能关闭了。谢谢!

7个回答

guwei4037
guwei4037   Ds   Rxr 2015.07.19 20:20

不会的,String k1 =f.getText(); 已经把f.getText()赋值给k1了,所以f.getText().equals("呵呵"); 为真,那么k1.equals("呵呵"); 就应该为真。

你可以System.out.println("");打印出来看一下各个变量真实的值。

CSDNXIAOD
CSDNXIAOD   2015.07.19 20:02

C# string 到底是引用类型还是值类型
如何给String类型的变量,加上“...”
c++中怎么判断一个string类型的字符串变量是否为数字?
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

danielinbiti
danielinbiti   Ds   Rxr 2015.07.19 20:14

最好把你的实际代码贴出来,从这三行代码来看,不会一个返回true,一个返回false的

yuke198907
yuke198907   2015.07.19 20:10

正常来说应该都一样啊,你把“呵呵”放前面呢?

gnail_oug
gnail_oug   2015.07.19 21:06

如果f.getText()确实返回的是“呵呵”,并且在k1.equals("呵呵"); 和 String k1 =f.getText(); 之间没有代码对k1修改,返回的就该是true,
估计是有其他代码改变了k1的值,光屏你写的这三行看不出问问的真正原因

91program
91program   Ds   Rxr 2015.07.19 21:16

String 是比较特殊的引用类型,具有一定的值类型的特性,但确实是引用类型。

strutce
strutce   Ds   Rxr 2015.07.19 21:53

if(f.getText().equals("GEM")&&(String.valueOf(f1.getPassword()).equals("111111"))){
System.exit(0);
}
改成
if(f.getText().equals("GEM")&&f1.getPassword().equals("111111")){
System.exit(0);
}

Csdn user default icon
上传中...
上传图片
插入图片