Te lo scrivo in pseudo-codice, così traducendo il codice te lo studi con attenzione e capisci l'esericizio:
ipotizzo che M sia la matrice/array bidimensionale preso in input e che la variabile rows indichi il numero di righe all'interno di essa:
codice:
current[] = null;
temp[] = null;
i = 0;

for each (i < rows - 1)
begin
    current = M[i];
    j = i + 1;
    for each  (j < rows)
        begin
           temp = M[j]
           equals = true;
           k = 0;
           for each k < current.length
              begin
                   if( current[k] != temp[k] )
                      begin
                         equals = false;
                         break;
                      end
                   k = k + 1;
              end
            if( equals ) return true;
            j = j + 1;
        end
    i = i + 1;
end

return false;
In java le matrici in sostanza possono essere rappresentate come array di array, quindi la logica dell'algoritmo non cambia.