<p>
Returning <code>null</code> instead of an actual array or collection forces callers of the method to explicitly test for nullity, making them more complex and less readable.
Moreover, in many cases, <code>null</code> is used as a synonym for empty.
</p>

<p>The following code:</p>

<pre>
public static Result[] getResults() {
  return null;                             // Non-Compliant
}

public static void main(String[] args) {
  Result[] results = getResults();

  if (results != null) {                   // Nullity test required to prevent NPE
    for (Result result: results) {
      /* ... */
    }
  }
}
</pre>

<p>should be refactored into:</p>

<pre>
public static Result[] getResults() {
  return new Result[0];                    // Compliant
}

public static void main(String[] args) {
  for (Result result: getResults()) {
    /* ... */
  }
}
</pre>

<p>This rule also applies to collections:</p>

<pre>
public static List&lt;Result&gt; getResults() {
  return null;                             // Non-Compliant
}
</pre>

<p>should be refactored into:</p>

<pre>
public static List&lt;Result&gt; getResults() {
  return Collections.emptyList();           // Compliant
}
</pre>