Java 转换后的charAt()不等于相同的字符串

Java 转换后的charAt()不等于相同的字符串,java,string,boolean,equals,charat,Java,String,Boolean,Equals,Charat,我的问题隐藏在下一个代码中: public class saturo { public String primer, d; public void start() { primer = "545640"; //d = "0"; d = String.valueOf(primer.charAt(((primer.length())-1))); if(d == "0"){ Sys

我的问题隐藏在下一个代码中:

public class saturo { 
     public String primer, d;
     public void start() {
         primer = "545640";
         //d = "0";
         d = String.valueOf(primer.charAt(((primer.length())-1)));

         if(d == "0"){
             System.out.println("This is equal: d == " + d);
         }else{
             System.out.println("This is not equal: d == " + d);
         }
         }
        public static void main(String args[]) {
            new saturo().start();
        } 
    }
如您所见,问题是如果我将字符串d声明为0,程序将执行它,因为d等于0并返回true

但如果我从字符串中获取字符0,将其转换为字符串,并检查它是否等于0,则得到一个false

我已经检查了字符编码是否有问题,但在任何情况下都是正确的。没有类型不匹配


其中的逻辑是?

使用.equals not==您正在通过引用而不是值进行比较

如果要比较两个字符串的值,需要使用.equals

所以你会这样做:

if(d.equals("0"){
 // your code here
}
Using==通过引用比较字符串在内存中的相同位置,其中.equals比较字符串的值