Java中数组的创建(C++风格)
Creation of Arrays in Java (The C++ Style)
为什么我们不能用Java制作这样的数组:
int marks[5];
在这个声明之后赋值?
任何人请解释术语或差异。
这是因为Java中没有堆栈数组。这里是Java等价物:
int[] marks = new int[5];
它看起来很像在C++中分配动态大小的数组。当然,您不必担心调用delete[]
,因为它是垃圾收集的。
因为您引用的语法在堆栈上分配数组,Java数组是对象,所有Java对象都在堆上分配(模最近的JVM优化,但这些都是隐式的)。
在一种没有手动内存管理的语言中,它几乎必须是这样的,因为当调用返回时,堆栈分配的东西就会消失,导致指针悬空,而Java的一个基本功能是不允许这样的东西。
当然,有人可能会争辩说Java应该使用堆栈分配语法来进行堆分配,但这会让任何知道C的人感到困惑。
在Java中,数组的大小由创建它的表达式决定,例如:
int[] marks = new int[5];
或
int[] marks = {1,2,3,4,5};
还请注意尽管Java中允许使用语法int marks[]
(Java有几个与C++兼容的规则),但不建议使用,语法int[] marks
更惯用,因此更可取。
int[] marks = new int[]{1, 2, 3};
因为数组是Object
-s(继承自Object
类)。要创建对象,必须使用new
关键字。(大多数时候)
我认为new
关键字背后的原因是表示变量是对动态分配实例的引用。
相关文章:
- Qt VTK交互风格的信号到小部件
- 我可以使用条件运算符初始化C风格的字符串文字吗
- Visual Studio 2019:插入多个C++风格的单行注释
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 重载运算符<<采用谷歌 C++ 风格
- C++许多 SFINAE 风格的过载
- 谷歌风格指南(前向分枝部分)
- 如何使用 cmake pack redhat 风格的 rpm,这是主要的和"-devel"?
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 如何编写一个类似于kernellist_head的c++风格的双链表实现
- 用现代C++STL数据结构替换旧的C风格数组
- 如何确保 C/C++ 代码中不会缺少 doxygen 风格的文档注释?
- C++(Visual Studio)有Java风格的注释吗?
- 如何"Re-Polish"相同风格的QApplication?
- 如何按照 Google C++风格指南连接字符串文字?
- 如何为特定的构建风格设置 cpp 文件夹
- 使用 rangesv3 在 c++ 中模拟 python 风格的列表理解?
- 包括C++标题,"..."与<...>风格,ISO / IEC官方意见?
- 为什么一个简单的"Hello World"风格的程序不能用Turbo C++编译?
- 我如何使用MFC C 模仿办公风格