Java学习:Java与C++数组初始化全对比
Java初始化数组和C++初始化数组的区别
1)初始化
a. 静态初始化
- Java 的静态初始化在声明时直接赋值,适用于已知初始值的情况。语法简洁,无需指定数组大小(编译器自动推断)。
// 一维数组
int[] arr1 = {1, 2, 3};
// 二维数组
int[][] arr2 = {{1, 2}, {3, 4}};
- C++ 的静态初始化类似,但需指定数组大小(除非通过初始化列表推断)。支持聚合初始化(C++11 起)。
// 一维数组
int arr1[] = {1, 2, 3}; // 自动推断大小
int arr2[3] = {1, 2, 3}; // 显式指定大小
// 二维数组
int arr3[2][2] = {{1, 2}, {3, 4}};
b. 动态初始化
- Java 动态初始化通过 new 关键字分配内存,适用于运行时确定大小或值的情况。基本类型初始化为默认值(如 int 为 0),对象初始化为 null。
// 一维数组
int[] arr1 = new int[3]; // 初始化为 [0, 0, 0]
arr1[0] = 1; // 手动赋值
// 二维数组
int[][] arr2 = new int[2][2]; // 初始化为 [[0, 0], [0, 0]]
- C++ 动态初始化需手动管理内存(使用 new/delete)。原生数组需显式循环初始化,而 std::vector 更常用(自动管理内存)。
// 原生数组(需手动释放)
int* arr1 = new int[3]{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
c. 关键差异
- 内存管理
- Java 数组由 JVM 自动垃圾回收。
- C++ 原生数组需手动释放,否则内存泄漏。
- 默认值
- Java 动态初始化自动填充默认值。
- C++ 原生动态数组不自动初始化(除非使用 new int3 或初始化列表)。
- 工具类支持
- C++ 推荐使用 std::vector 替代原生数组以简化操作。
- Java 无类似容器,数组是基础数据结构。
- 语法灵活性
- Java 静态初始化无需指定大小。
- C++ 静态初始化通常需显式大小(除非初始化列表完整)。
d. 代码示例对比
// Java 动态初始化
int[] arr = new int[3];
arr[0] = 1; // 其余元素为 0
// C++ 动态初始化(原生数组)
int* arr = new int[3]; // 未初始化,值随机
arr[0] = 1;
delete[] arr; // 必须释放
// C++ 更安全的动态数组(vector)
std::vector<int> arr(3, 0); // 初始化为 [0, 0, 0]
arr[0] = 1; // 无需手动释放
2)内存管理
- Java数组是对象,存储在堆内存中,由垃圾回收器管理。数组变量实际是引用,可以重新指向其他数组。
- C++数组通常存储在栈或静态存储区(除非使用new动态分配),需要手动管理内存。数组名代表数组首地址,不能直接重新赋值。
3)多维数组
- Java多维数组可以是不规则的
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
- C++多维数组必须是规则的:
int arr[3][2]; // 固定大小的二维数组
4)动态数组
- Java可以使用ArrayList等集合类实现动态数组。
- C++可以使用std::vector实现动态数组功能。
5)默认值
- Java数组元素有默认值(数值类型为0,布尔类型为false,对象为null)。
- C++原生数组不会自动初始化(除非使用= {}),内容可能是随机的。
Java学习:Java与C++数组初始化全对比的更多相关文章
- java学习之二维数组
java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...
- [Java学习] Java虚拟机(JVM)以及跨平台原理
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...
- java学习第三天 数组
java中数组一样存在多维,二维数组,三维数组..... 二维数组的定义 格式: 数据类型 [][] 数组名 = new 数据类型 [][]; 动态初始化 数据类型[][] 数组名 = new 数 ...
- java学习(三)数组
一维数组的定义格式: int[] a; //定义一个int类型的数组a变量 int a[]; //定义一个int类型的a数组变量 初始化一个int类型的数组 int[] arr = new i ...
- Java学习第四篇:数组,排序,查找
一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...
- java学习面向对象之父子构造函数初始化
在之前讲到java面向对象继承的时候,我们只讲到了两个比较重要的知识点,一个是父子类当中有同名的成员变量,这个时候,我们引入了super这个关键字来区分这两个同名成员变量,除此之外,我们还讲到了父子同 ...
- java学习笔记4--对象的初始化与回收
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note4.html,转载请注明源地址. 1.对象初始化和回收 对象初始化 系统在生成对象时,会 ...
- Java学习个人备忘录之数组工具类
下面主要讲解一个针对数组操作的工具类. a.java -- 工具类文件 //按理来说要先编译本文件, 然后再编译主函数 class ArrayTool { /* 获取整型数组的最大值 */ publi ...
- Java学习个人备忘录之数组
数组 概念:同一种类型数据的集合,其实数组就是一个容器. 数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式1:元素类型[] 数组名 = new 元素类型[元素个数]; 格式2: ...
- Java基础(7):二维数组初始化时需要注意的问题
二维数组可以先指定行,再指定列:但不能先指定列,再指定行 没有说明二维数组的行的个数,在定义二维数组时也可以只指定行的个数,然后再为每一行分别指定列的个数.如果每行的列数不同,则创建的是不规则的二维数 ...
随机推荐
- Everyone's Favorite Linear, Direct Access, Homogeneous Data Structure: The Array(英翻中)
Arrays are one of the simplest and most widely used data structures in computer programs. Arrays in ...
- L1-8、Prompt提升提问质量的实用技巧(Tips)
掌握提问的艺术,让你的 AI 更聪明.更贴心. 为什么你的提问得不到好答案? ChatGPT 等大模型的表现很大程度上取决于你的提问方式.提得好,AI 像专家:提不好,AI 像糊涂蛋. 常见低质量提问 ...
- ps ef命令查询进程号pid
楼兰胡杨已经在<五分钟扫盲:25个工作中常用的Linux命令>分享了ps命令的简单使用方法,但是,写的过于笼统,这里详细介绍一下. 语法:ps -ef | grep process ...
- IDEA jrebel热部署插件破解-最新版
前言 JRebel插件2022.4.2及之后版本在线地址激活方式已不可用,所以采用本地地址 + 生成的GUID方式 激活 (本文章写的时候,用的JRebel最新版本2023.2.1) 如果需要在线激活 ...
- FastAPI安全认证:从密码到令牌的魔法之旅
title: FastAPI安全认证:从密码到令牌的魔法之旅 date: 2025/06/02 13:24:43 updated: 2025/06/02 13:24:43 author: cmdrag ...
- js加密手机号码中间四位方法
一.实现效果: 二.方法代码封装: 方法一: //encryptPhoneNumber.ts /** * 加密手机号码中间四位 * @param phone 手机号 * @returns { stri ...
- C#-Visual Studio工具使用实践
Visual Studio -- 毋庸置疑的宇宙第一综合性编程IDE,可用于构建 Web.云.桌面.移动应用.服务和游戏. 推荐安装Enterprise 企业版!功能最全. 01.Visual Stu ...
- 性能优化:JPPD(连接谓词下推)在哪些情况下生效
我们的文章会在微信公众号Oracle恢复实录和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览 ...
- linux(Ubuntu22.04)二进制安装mysql及redis
安装MySQL 1.下载mysql安装包 https://downloads.mysql.com/archives/community/ 解压压缩包 tar xf mysql-8.0.30-linux ...
- 附录:LInux编辑器
附录2:编辑器 1.vim 参考:菜鸟教程 1.1.安装 sudo apt install -y vim 1.2.常用指令 基本上 vi/vim 共分为三种模式,命令模式(Command Mode). ...