Java学习:Java与C++数组初始化全对比
<h3 id="java初始化数组和c初始化数组的区别">Java初始化数组和C++初始化数组的区别</h3><h4 id="1初始化">1)初始化</h4>
<h5 id="a-静态初始化">a. 静态初始化</h5>
<ul>
<li>Java 的静态初始化在声明时直接赋值,适用于已知初始值的情况。语法简洁,无需指定数组大小(编译器自动推断)。</li>
</ul>
<pre><code class="language-java">// 一维数组
int[] arr1 = {1, 2, 3};
// 二维数组
int[][] arr2 = {{1, 2}, {3, 4}};
</code></pre>
<ul>
<li>C++ 的静态初始化类似,但需指定数组大小(除非通过初始化列表推断)。支持聚合初始化(C++11 起)。</li>
</ul>
<pre><code class="language-java">// 一维数组
int arr1[] = {1, 2, 3};// 自动推断大小
int arr2 = {1, 2, 3}; // 显式指定大小
// 二维数组
int arr3 = {{1, 2}, {3, 4}};
</code></pre>
<h5 id="b-动态初始化">b. 动态初始化</h5>
<ul>
<li>Java 动态初始化通过 new 关键字分配内存,适用于运行时确定大小或值的情况。基本类型初始化为默认值(如 int 为 0),对象初始化为 null。</li>
</ul>
<pre><code class="language-java">// 一维数组
int[] arr1 = new int; // 初始化为
arr1 = 1; // 手动赋值
// 二维数组
int[][] arr2 = new int; // 初始化为 [, ]
</code></pre>
<ul>
<li>C++ 动态初始化需手动管理内存(使用 new/delete)。原生数组需显式循环初始化,而 std::vector 更常用(自动管理内存)。</li>
</ul>
<pre><code class="language-java">// 原生数组(需手动释放)
int* arr1 = new int{1, 2, 3}; // C++11 初始化列表
delete[] arr1;
// 更推荐使用 vector
std::vector<int> arr2 = {1, 2, 3}; // 动态大小
std::vector<std::vector<int>> arr3(2, std::vector<int>(2, 0)); // 二维初始化为 0
</code></pre>
<h5 id="c-关键差异">c. 关键差异</h5>
<ol>
<li>内存管理
<ul>
<li>Java 数组由 JVM 自动垃圾回收。</li>
<li>C++ 原生数组需手动释放,否则内存泄漏。</li>
</ul>
</li>
<li>默认值
<ul>
<li>Java 动态初始化自动填充默认值。</li>
<li>C++ 原生动态数组不自动初始化(除非使用 new int3 或初始化列表)。</li>
</ul>
</li>
<li>工具类支持
<ul>
<li>C++ 推荐使用 std::vector 替代原生数组以简化操作。</li>
<li>Java 无类似容器,数组是基础数据结构。</li>
</ul>
</li>
<li>语法灵活性
<ul>
<li>Java 静态初始化无需指定大小。</li>
<li>C++ 静态初始化通常需显式大小(除非初始化列表完整)。</li>
</ul>
</li>
</ol>
<h5 id="d-代码示例对比">d. 代码示例对比</h5>
<pre><code class="language-java">// Java 动态初始化
int[] arr = new int;
arr = 1; // 其余元素为 0
// C++ 动态初始化(原生数组)
int* arr = new int; // 未初始化,值随机
arr = 1;
delete[] arr; // 必须释放
// C++ 更安全的动态数组(vector)
std::vector<int> arr(3, 0); // 初始化为
arr = 1; // 无需手动释放
</code></pre>
<h4 id="2内存管理">2)内存管理</h4>
<ul>
<li>Java数组是对象,存储在堆内存中,由垃圾回收器管理。数组变量实际是引用,可以重新指向其他数组。</li>
<li>C++数组通常存储在栈或静态存储区(除非使用new动态分配),需要手动管理内存。数组名代表数组首地址,不能直接重新赋值。</li>
</ul>
<h4 id="3多维数组">3)多维数组</h4>
<ul>
<li>Java多维数组可以是不规则的</li>
</ul>
<pre><code class="language-java">int[][] arr = new int[];
arr = new int;
arr = new int;
</code></pre>
<ul>
<li>C++多维数组必须是规则的:</li>
</ul>
<pre><code class="language-java">int arr; // 固定大小的二维数组
</code></pre>
<h4 id="4动态数组">4)动态数组</h4>
<ul>
<li>Java可以使用ArrayList等集合类实现动态数组。</li>
<li>C++可以使用std::vector实现动态数组功能。</li>
</ul>
<h4 id="5默认值">5)默认值</h4>
<ul>
<li>Java数组元素有默认值(数值类型为0,布尔类型为false,对象为null)。</li>
<li>C++原生数组不会自动初始化(除非使用= {}),内容可能是随机的。</li>
</ul><br><br>
来源:https://www.cnblogs.com/Saintwaters/p/19025647
頁:
[1]