zolt85
@zolt85
Программист

Почему возникает NullPointerException?

Всем привет.
Есть вот такой класс:
import java.lang.*;
import java.util.*;


public class A {
	
	public static void main(String[] args){
		List<Object> list = makeList(args);
		operationWithList1(list);
		operationWithList2(list);
		System.exit(0);
	}

	private static List<Object> makeList(String[] args) {
		System.out.println("init list if args is not empty");
		if(args.length > 0) {
			return new ArrayList<Object>();
		}
		return null;
	}

	private static void operationWithList1(List<Object> list) {
		System.out.println("operationWithList1 ...");
		if(list == null){
			list = new ArrayList<Object>();
		}
		list.add(1);
		list.add(2);
		System.out.println("list is exists!");
		for(int i = 0; i < list.size(); i++) {
			System.out.println("\tlist item[" + i + "] = " + list.get(i));
		}
	}

	private static void operationWithList2(List<Object> list) {
		System.out.println("operationWithList2 ...");
		for(int i = 0; i < list.size(); i++) {
			System.out.println("\tlist item[" + i + "] = " + list.get(i));
		}
	}
}


Он компилируется все норм. Собственно вопрос, почему при запуске класса без аргументов
java A
я получаю вот такой вывод?
init list if args is not empty
operationWithList1 ...
list is exists!
        list item[0] = 1
        list item[1] = 2
operationWithList2 ...
Exception in thread "main" java.lang.NullPointerException
        at A.operationWithList2(A.java:37)
        at A.main(A.java:10)


P.S. Я знаю как исправить ошибку, но я не понимаю почему она возникает? Просветите меня пожалуйста.
  • Вопрос задан
  • 2613 просмотров
Решения вопроса 1
В Java передача данных в методы происходит по значению. Поэтому после вызова
operationWithList1(list);
list, объявленный в main, остается равным null.

Passing Reference Data Type Arguments
Is Java “pass-by-reference” or “pass-by-value”?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы