JAVA中数组定义new分配内存空间的问题

JAVA中在定义一个数组的时候,根据书上内容形式,举一个例子
int[] arr=new int[]{3,4,5,};
但是在实际中,我见到过或者使用更多的是
int[] arr={3,4,5};
这个时候要不要new去分配内存又有什么区别呢?
在JAVA中 是不是没有new 分配的时候 数组arr在内存栈中
new分配内存空间时 数组arr就到了堆内存中呢

现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就初始化
而new是动态初始化 在运行的时候才初始化
数组里的数据一直都是在堆中的

我知道的是这个样子的:new int[]{3,4,5,};这个在堆中开辟了一个空间用于存放这个数组对象,内容是数据。然后int[] arr=new int[]{3,4,5,};这句话的得在第一句话的基础上说。意思就是先在栈中开辟一个空间,然后把new int[]{3,4,5,};所产生数组对象的地址存放到栈中开辟的空间中。
int[] arr={3,4,5};只开辟了一个空间,至于在栈中还是在堆中这个我也不确定,推断是在栈中。

现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就初始化
而new是动态初始化 在运行的时候才初始化
数组里的数据一直都是在堆中的

以上两种都是数组的静态初始化,区别是:

 第一种 new int[]{} 是放在堆区的,而arr是在栈区的,两者通过引用相互连接;
 第二种  直接在栈区的.

如果是大量的代码还是第二种运行比较快。

初始化数组的各种形式:第一种: int[]array=new int[3]; ("[ ]"中的3表示数组中元素的个数)
第二种: int[]array={1,2,5,3,2}; (当数组有确定的元素时,可以直接使用大括号,)

初始化数组的各种形式:第一种: int[]array=new int[3]; ("[ ]"中的3表示数组中元素的个数)
第二种: int[]array={1,2,5,3,2}; (当数组有确定的元素时,可以直接使用大括号,)