Java 为什么从Scanner方法next()或nextDouble()读取的变量分别等于字符串或双精度

Java 为什么从Scanner方法next()或nextDouble()读取的变量分别等于字符串或双精度,java,string,file,Java,String,File,比如说, 如果我声明一个字符串变量和一个双变量 String d = "dragon"; double = 1.45; 然后我有一个文本文件,文件的第一行是 一条龙是1.45 所以我打开了文件 { try { x = new Scanner(new File("Dragon.txt")); } catch(Exception e) { System.out.print

比如说,

如果我声明一个字符串变量和一个双变量

String d = "dragon";
double = 1.45;
然后我有一个文本文件,文件的第一行是

一条龙是1.45

所以我打开了文件

 {
         try {
             x = new Scanner(new File("Dragon.txt"));

         }
         catch(Exception e)
         {
             System.out.println("Could not find file");
         }
     }
// And then read in the data, in this case I use hasNext which returns a String.
     public void readFileData()
     {
         while(x.hasNext())
         {

  // Remember, this is the first line of the text file: A dragon is 1.45
         String a1 = x.next();  // al = "A";
         String a2 = x.next();  // a2 = "dragon;

// And I test a2 to see it is equal to dragon, however it is not.

         if(d == a2)
         {
             System.out.println("Wow");
         }
         else
             System.out.println("Naw man");
         String a3 = x.next();
         String a4 = x.next(); 

// Of course I do the same thing for the a4 variable and of course the String variables are replaced with double and nextdouble() method is used.
提前非常感谢任何能提供帮助的人

比较字符串时使用String.equals检查引用是否相同。String.equals测试对象是否相同


因此,使用ifd.equalsa2代替ifd==a2。如果使用d.equalsa2,请尝试使用equals进行字符串比较。

首先,您尝试比较的是参考值,而不是字符串对象的内容

正如其他人所指出的,您需要使用String.equalstring-otherString方法

接下来,您将1.45作为字符串读取,而不是双精度。这两件事是不可比的。你需要读1.45作为双精度


这将把你的线A dragon is 1.45转换为三个字符串“A”、“dragon”、“is”和一个双1.45

我不明白。你的问题是什么?5使用String.equals来比较其他字符串references@Stefano够了。说到“可理解”,你们可以自己试着拼写正确。我想现在你们都明白我的问题是什么了,下次我会更清楚。顺便说一句,我的问题是为什么nextInt中存储的字符串与我声明的名为dragon的字符串不同。非常感谢EJP和Stefano。这解决了他的部分问题。他将遇到的下一个问题是,当他试图将字符串与doubleTrue进行比较时,但我忽略了这一点,因为他用于比较的代码未在问题中列出。他只提到使用double和nextDouble应该可以。的确,非常感谢MazaThank,Roach先生,这完美地回答了我的问题。
String a1 = x.next();
String a2 = x.next();
String a3 = x.next();
double d1 = x.nextDouble();