Java比较两个字符串抛出仍然是真的

时间:2015-07-31 09:46:16

标签: java

Hy,当我比较两个字符串时,我有一个问题

public void run(){
    System.out.println(properties.readConfig("port.cfg"));
    String lport = "";
    String lasd = "";
    File fport = null;
    File fasd = null;
    try {
        BufferedWriter writer = new BufferedWriter( new FileWriter("port.cfg"));//this (if file doent exist) will create it
        BufferedWriter witer = new BufferedWriter( new FileWriter("asd.cfg"));//this (if file doent exist) will create it
        writer.close();
        witer.close();
        BufferedReader reader = new BufferedReader( new FileReader("port.cfg"));
        BufferedReader rader = new BufferedReader( new FileReader("asd.cfg"));
            lport = reader.readLine();
            lasd = rader.readLine();
        reader.close();
        rader.close();
        fasd = new File("asd.cfg");
        fport = new File("port.cfg");
        commands.print(String.valueOf(StringUtils.equals(lasd, lport)));
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        temp = InetAddress.getLocalHost().toString().split("/");
        settings.myIp = temp[1];
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }           
    if(StringUtils.equals(lasd, lport)){//here is the problem
        properties.saveConfig("port.cfg", "8795");
        settings.port = properties.readConfig("port.cfg");
        commands.print("Current port is: " + settings.port);
    }else{
        settings.port = properties.readConfig("port.cfg");
    }



}  

当我第一次运行程序时,问题部分抛出true并写入文件port.cfg一个端口,用户可以更改此端口(这很好),但是当我第二次运行程序时它将再次抛出true并重写端口(这很糟糕,因为文件port.cfg (String lport)中的文本与文件asd.cfg (String lasd)中的文本不同。commands和{{ 1}}是我的班级。settings班级来自StrungUtils

编辑:

我尝试过:apache.common.lang

2 个答案:

答案 0 :(得分:2)

 StringUtils.equals(null, null) = true

对于null个值,StringUtils将返回true。您应该在null equals之前添加StringUtils检查

if(lasd != null && lport != null && StringUtils.equals(lasd, lport)) {
   //...
}

答案 1 :(得分:2)

我们不知道如何实施StringUtils.equals()。例如,throws一个RuntimeException

public class Demo {

    public static void main(String[] args) {

        String a = null;
        String b = null;

        System.out.println(StringUtils.equals(a, b));
    }
}

class StringUtils {

    public static final boolean equals(String a, String b) {
        return a.equals(b);
    }
}

另一方面,returns true

public static final boolean equals(String a, String b) {
    if(a == null && b == null) {
        return true;
    }
    else if(a == null || b == null) {
        return false;
    }
    else {
        return a.equals(b);
    }
}

在不了解StringUtils.equals()的实施情况的情况下,我们无法帮助您。您可以使用两种不同的方式编写自己的equals()方法,或者学习您在程序中包含的API并相应地使用它们。