Java 将getter方法中的名称与用户输入字符串进行比较时出现问题

Java 将getter方法中的名称与用户输入字符串进行比较时出现问题,java,if-statement,conditional-operator,getter,Java,If Statement,Conditional Operator,Getter,我在if语句中比较时遇到问题,在C编程中我使用“==”双等号来比较两个字符串 使用getter方法将字符串与新字符串进行比较如何。。。我尝试使用双等号,但系统提示我将其更改为: if(条目[i].getName().equals(EName)) 顺便说一下,这是我的全部代码: import javax.swing.JOptionPane; import javax.swing.JTextArea; public class AddressBook { private AddressB

我在if语句中比较时遇到问题,在C编程中我使用“==”双等号来比较两个字符串

使用getter方法将字符串与新字符串进行比较如何。。。我尝试使用双等号,但系统提示我将其更改为:

if(条目[i].getName().equals(EName))

顺便说一下,这是我的全部代码:

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class AddressBook {

    private AddressBookEntry entry[];
    private int counter;
    private String EName;

    public static void main(String[] args) {
        AddressBook a = new AddressBook();
        a.entry = new AddressBookEntry[100];
        int option = 0;
        while (option != 5) {
            String content = "Choose an Option\n\n"
                    + "[1] Add an Entry\n"
                    + "[2] Delete an Entry\n"
                    + "[3] Update an Entry\n"
                    + "[4] View all Entries\n"
                    + "[5] View Specific Entry\n"
                    + "[6] Exit";
            option = Integer.parseInt(JOptionPane.showInputDialog(content));
            switch (option) {
                case 1:
                    a.addEntry();
                    break;
                case 2:

                    break;
                case 3:
                    a.editMenu();
                    break;
                case 4:
                    a.viewAll();
                    break;
                case 5:
                    break;
                case 6:
                    System.exit(1);
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Invalid Choice!");
            }
        }
    }

    public void addEntry() {
        entry[counter] = new AddressBookEntry();
        entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
        entry[counter].setAdd(JOptionPane.showInputDialog("Enter add: "));
        entry[counter].setPhoneNo(JOptionPane.showInputDialog("Enter Phone No.: "));
        entry[counter].setEmail(JOptionPane.showInputDialog("Enter E-mail: "));
        counter++;
    }

    public void viewAll() {
        String addText= "";
        for (int i = 0; i <  counter; i++) {
            addText = addText+(i+1)+ entry[i].getInfo()+ "\n";
        }
        JOptionPane.showMessageDialog(null, new JTextArea(addText));
    }

    public void editMenu() {
        int option = 0;
        while (option != 6) {
            String content = "Choose an Option\n\n"
                    + "[1] Edit Name\n"
                    + "[2] Edit Address\n"
                    + "[3] Edit Phone No.\n"
                    + "[4] Edit E-mail address\n"
                    + "[5] Back to Main Menu";
            option = Integer.parseInt(JOptionPane.showInputDialog(content));
            switch (option) {
                case 1:
                    editName();
                    break;
                case 2:
                    editAdd();
                    break;
                case 3:
                    editPhoneNo();
                    break;
                case 4:
                    editEmail();
                    break;
                case 5:
                    return;
                default:
                    JOptionPane.showMessageDialog(null, "Invalid Choice!");
            }
        }
    }

    public void editName() {
        EName = JOptionPane.showInputDialog("Enter name to edit: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(EName)) {
                //JOptionPane.showMessageDialog(null, "found");
                entry[i].setName(JOptionPane.showInputDialog("Enter new name: "));
            }else {
                JOptionPane.showMessageDialog(null, "Entered Name not Found!");
            }
        }
    }

    public void editAdd() {
        EName = JOptionPane.showInputDialog("Enter name to edit: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(EName)) {
                //JOptionPane.showMessageDialog(null, "found");
                entry[i].setAdd(JOptionPane.showInputDialog("Enter new Address: "));
            }else {
                JOptionPane.showMessageDialog(null, "Entered Name not Found!");
            }
        }
    }

    public void editPhoneNo() {
        EName = JOptionPane.showInputDialog("Enter name to edit: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(EName)) {
                //JOptionPane.showMessageDialog(null, "found");
                entry[i].setPhoneNo(JOptionPane.showInputDialog("Enter new Phone No.: "));
            }else {
                JOptionPane.showMessageDialog(null, "Entered Name not Found!");
            }
        }
    }

    public void editEmail() {
        EName = JOptionPane.showInputDialog("Enter name to edit: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(EName)) {
                //JOptionPane.showMessageDialog(null, "found");
                entry[i].setEmail(JOptionPane.showInputDialog("Enter new E-mail add: "));
            }else {
                JOptionPane.showMessageDialog(null, "Entered Name not Found!");
            }
        }
    }
}
请原谅我的密码。。。我是java的新手。。。。请帮忙

如果用户输入等于条目[i].getName(),则我要遍历所有数组并编辑特定的细节

非常感谢…

如果要比较字符串的表示而不是其对象标识,请使用
equals()

假设我们有:
String s=“hello”

如果要比较字符串的表示形式而不是其对象标识,请使用
equals()

假设我们有:
String s=“hello”


至少有三件事需要了解:

Java:==测试两个引用是否指向同一个对象,而equals测试两个对象是否具有相同的内容。因此,即使两个字符串具有相同的内容,==可能给出false,而s1.equals(s2)将给出true。你可以在谷歌上找到这方面的信息

C:在C中,不应该使用==或来比较两个字符串。C中的字符串通常是char*(或constchar*),您应该将它们与strcmp进行比较(否则您将遇到与Java中相同的问题)


C++:std::string的实例可以使用==进行比较。

至少有三件事需要了解:

Java:==测试两个引用是否指向同一个对象,而equals测试两个对象是否具有相同的内容。因此,即使两个字符串具有相同的内容,==可能给出false,而s1.equals(s2)将给出true。你可以在谷歌上找到这方面的信息

C:在C中,不应该使用==或来比较两个字符串。C中的字符串通常是char*(或constchar*),您应该将它们与strcmp进行比较(否则您将遇到与Java中相同的问题)


C++:std::string的实例可以使用==。

不要使用
=
来比较C中的字符串。会发生不好的事情。那么这里的实际问题是什么?你真的使用
=
来比较“C”中的字符串吗?正如nmichaels所评论的,这不会给出预期的结果,因为它比较的是内存中两个字符串的地址,而不是字符串本身的内容。不要用
=
来比较C中的字符串。会发生不好的事情。那么这里的实际问题是什么?你真的用
=
来比较“C”中的字符串吗? 正如nmichaels所评论的,这不会给出预期的结果,因为它会比较内存中两个字符串的地址,而不是字符串本身的内容。事实上,
“hello”==“hello”
也是正确的(因为相同的编译时常量字符串是相同的字符串对象)。。。因为我在比较两个字符串。equals更好地使用thanksNow,我们必须希望这个
sayHello()
方法做一些其他事情,然后
返回“Hello”
:-p
“hel”。concat(“lo”)
几乎肯定是一个不同的字符串对象,而
新字符串(“Hello”)
肯定是。@Paŭlo:是的。。。我假设:-P刚刚测试了你的两个例子,你又一次是正确的!事实上,
“hello”==“hello”
也是正确的(因为相同的编译时常量字符串是相同的字符串对象)。。。因为我在比较两个字符串。equals更好地使用thanksNow,我们必须希望这个
sayHello()
方法做一些其他事情,然后
返回“Hello”
:-p
“hel”。concat(“lo”)
几乎肯定是一个不同的字符串对象,而
新字符串(“Hello”)
肯定是。@Paŭlo:是的。。。我假设:-P刚刚测试了你的两个例子,你又一次是正确的!
public class AddressBookEntry {

    private String name;
    private String add;
    private String phoneNo;
    private String email;
    private int entry;

    public String getAdd() {
        return add;
    }

    public String getEmail() {
        return email;
    }

    public int getEntry() {
        return entry;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNo() {
        return phoneNo;
    }

    public void setAdd(String add) {
        this.add = add;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setEntry(int entry) {
        this.entry = entry;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPhoneNo(String phoneNo) {
        this.phoneNo = phoneNo;
    }

    public String getInfo() {
        String Info = "NAME\tADDRESS\tPHONE NO.\tE-MAIL ADD\n"
                + name + "\t " + add + "\t " + phoneNo + "\t " + email + "\n";
        return Info;
    }

    public String getInfo2() {
        String content = "INFORMATION:\n\n"
                + "Name: " + name + "\n"
                + "Address: " + add + "\n"
                + "Tel. No: " + phoneNo + "\n"
                + "Email Add: " + email + "\n\n";
        return content;
    }
}
s == s
=> true // they are the *same* object
"hello" == new String("hello") // see comment below...
=> false // they are different objects representing the same string of text
"hello".equals("hello")
=> true
s.equals("hello")
=> true