Разница между этими переменными в том, что вторая неинициализированна, и в ней null.
В джаве все массивы "динамические", то есть выделены в куче, а не на стеке.
С++ статичесий язык а Java ООП
Путаете мягкое с тёплым. Джава тоже статически типизированный язык.
В джаве, в отличие от С++ все объекты выделяются в куче, поэтому все переменные(кроме примитивов) содержат в себе ссылку. Массив в джаве тоже выделяется в куче, а массив объектов (Integer это объект в отличие от int) это, на самом деле, массив ссылок.
int[] a; // a == null
int[] b = new int[5]; // b == [0, 0, 0, 0, 0]
int[] c = new int[]{1, 2, 3}; // c == [1, 2, 3]
Integer[] d; // d == null
Integer [] e = new Integer[5]; // e == [null, null, null, null, null]
Integers [] f = new Integer[]{1, 2, 3}; // f == [Integer(1), Integer(2), Integer(3)} случился autoboxing, то есть автоматическая запаковка примитивов в соответствующий объект.