2017-08-16 34 views
1

//试图找到toUppercase术后2个是否匹配代码只显示假,任何人都可以向我解释什么地方错了

package testapp1; 

public class TestApp1 
{ 
    public static void main(String[] performing_a_simple_for_loop) 
    { 
     String firstName = "John"; 
     char fname[] = {'J','O','H','N'}; 
     System.out.println(firstName.toUpperCase()); 
     String name2; 
     name2 = firstName.toUpperCase(); 
     if(fname.equals(name2)) 
     { 
      System.out.println("True");  
     } 
     else 
     { 
      System.out.println("False"); 
     } 
    } 
} 
+1

因为的char []是diferent为String。尝试使用:new String(fname).equals(name2)。 – elysrivero99

+0

因为'char []'是一个字符数组,'String'是一个类,它们是不一样的。您应该将字符数组转换为一个“字符串”,然后将其与另一个“字符串”进行比较。正如其他已经提到的那样:'new String(fname).equals(name2);' –

回答

1

这就是为什么总是打印false

fname.equals(name2) 
的原因

你是比较针对阵列的String ...

,因为他们是不相同的数据类型

返回假

试想一下,如果我做的:

"1".equals(1) 

是,两者都抱着莫名其妙相同的信息,但是这还不够在Java中说,他们是平等的......


所以你可以做:???需要一种类型转换到另一个...

// option 1: char[] -> string 
System.out.println(new String(fname).equals(firstName.toUpperCase())); 

// option 2: string -> char[] 
System.out.println(Arrays.equals(firstName.toUpperCase().toCharArray(), fname)); 

和你看,用于比较阵列可能需要的Array.equals()方法

2

fname是一个数组,所以不能直接相比字符串

你可以做

if(new String(fname).equals(name2)) 
相关问题