Здравствуйте. Возник вопрос по задаче. Смог решить её, инициализировав строковую переменную current в начале цикла, который перебирает строки массива и проверяет их на идентичность. Данная строковая переменная в начале цикла получает значение strings[i] и занимает его место в
if (strings[i].equalsIgnoreCase(strings[j]))
В моём первоначальном решении, которое прикрепил ниже, возникает java.lang.NullPointerException
package com.javarush.task.pro.task05.task0508;

import java.util.Scanner;

/*
Удаляем одинаковые строки
*/

public class Solution {
    public static String[] strings;

    public static void main(String[] args) {
        //напишите тут ваш код
        Scanner input = new Scanner(System.in);
        strings = new String[6];

        for (int i = 0; i < strings.length; i++)
            strings[i] = input.nextLine();

        for (int i = 0; i < strings.length; i++)
        {
            if (strings[i] != null)
            {
                for (int j = i + 1; j < strings.length; j++)
                {
                    if (strings[i].equalsIgnoreCase(strings[j]))
                    {
                        strings[i] = null;
                        strings[j] = null;
                    }
                }
            }
        }

        for (int i = 0; i < strings.length; i++) {
            System.out.print(strings[i] + ", ");
        }
    }
}
Суть вопроса - в чём принципиальная разница между этими двумя подходами? Фактически переменная и так получает значение strings[i], но при этом не вызывает java.lang.NullPointerException, как если бы я обращался напрямую к элементу массива. Логика на первый взгляд идентичная.