title: Trying to diagnose NullPointerException
body: <p>I am writing code for a course. We are meant to scan lines from a file specified by the user, search each line for one or more words specified by the user, and report how many times in the whole file (having processed line by line) these words are present. We are given three classes, and meant to write the fourth. My code is throwing a NullPointerException on line 12, and I'm not sure why. As far as I can see I have both declared and initialized the variables involved in that line. My code is:</p>
  
  <pre><code>import java.io.IOException;
  import java.util.*;
  
  public class WordFreq extends Echo{
    String[] searchWordsAsStrings;
    WordCount[] searchWords;
  
    public WordFreq(String f, String w) throws IOException{
      super(f);
      searchWordsAsStrings = w.split(" ");
      for(int a = 0; a &lt; searchWordsAsStrings.length; a++){
        searchWords[a] = new WordCount("");
      }
      for(int a = 0; a &lt; searchWordsAsStrings.length; a++){
        searchWords[a].setWord(searchWordsAsStrings[a]);
      }
    }
  
    public void processLine(String line){
      StringTokenizer st = new StringTokenizer(line);
      while(st.hasMoreTokens()){
        for(int a = 0; a &lt; searchWords.length; a++){
          if(searchWords[a].getWord() == st.nextToken()){
            searchWords[a].incCount();
          }
        }  
      }
    }
  
    public void reportFrequencies(){
      System.out.println("Word counts:");
      for(int a = 0; a &lt; searchWords.length; a++){
        System.out.println(searchWords[a].toString());
      }
    }
  }
  </code></pre>
  
  <p>Stack trace:</p>
  
  <pre><code>java.lang.NullPointerException
      at WordFreq.&lt;init&gt;(WordFreq.java:12)
      at FreqStudy.main(FreqStudy.java:20)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
  </code></pre>
  
  <p>The main class of this application is below. I have commented out the given code and provided my own, in an effort to diagnose the problem.</p>
  
  <pre><code>import java.util.*;
  import java.io.*;
  
  public class FreqStudy{
    public static void main(String[] args) throws IOException
    {
      /*
      Scanner scan = new Scanner(System.in);
      System.out.println("enter file name");
      String fileName = scan.next();
      */
      String fileName = "pg37997.txt";
      /*
      Scanner scan2 = new Scanner(System.in);
      System.out.println("enter words to search for");
      System.out.println("enter lower case, separated by spaces");
      String wordString = scan2.nextLine();
      */
      String wordString = "cow horse chicken goat pig";
      WordFreq f = new WordFreq(fileName,wordString);
      f.readLines();
      f.reportFrequencies();
    }
  }
  </code></pre>
  
  <p>This application also uses the Echo and WordCount classes, provided below:</p>
  
  <pre><code>import java.util.Scanner;
  import java.io.*;
  
  public class Echo{
    String fileName; // external file name
    Scanner scan; // Scanner object for reading from external file
  
    public Echo(String f) throws IOException
    {
      fileName = f;
      scan = new Scanner(new FileReader(fileName));
    }
  
    public void readLines(){ // reads lines, hands each to processLine
      while(scan.hasNext()){
        processLine(scan.nextLine());
      }
      scan.close();
    }
  
    public void processLine(String line){ // does the real processing work
      System.out.println(line);
    }
  }
  
  public class WordCount{
  
    private String word;
    private int count;
  
    public WordCount(String w){
      word = w;
      count = 0;
    }
  
    public String getWord(){
      return word;}
  
    public void setWord(String w){
      word = w;
    }
  
     public int getCount(){
      return count;}
  
    public void incCount(){count++;}
  
    public String toString() {
      return(word +  " --- " + count);
    }
  
    public boolean equals(Object other){
      WordCount i = (WordCount)other;
      return (this.word.equals(i.word));
    }
  }
  </code></pre>
  
  <p>I well and truly cannot trace where the exception is coming from. I've read up on what generates it (many explanations on this site) but I cannot diagnose what in my actual code is throwing the exception.</p>
  
  <p>Many thanks.</p>