c# - Java 是如何处理原始类型数组的?

标签 c# java arrays primitive-types

<分区>

Possible Duplicate:
How are Integer arrays stored internally, in the JVM?

在 C# 中,当您创建一个引用类型的新数组时,它会将指针放在堆栈上,并将对象本身放在堆中。如果您使用简单的基本类型(例如 intdouble 等)创建此数组,它所做的是将值准确地放在它们在堆中的位置,而不是指针它指向存储它的内容的另一个堆地址。

有人可以解释一下这在 Java 中是如何发生的吗? Java 一直在数组中使用 Integer(一种引用类型),还是像 C# 那样对待值类型?

int[] hello = new int[5];
hello[0] = 2; // C# put this value directly in same slot and doesn't 
//create a wrapping object.

我知道一个叫做 Wrapping Types in Java 的东西,而 C# 没有。 C# 具有自动装箱功能,但 Int32 不是引用类型,而是 ValueType ,其中 Integer 是对象而不是 int 。您可以使用 Object o = 5; 装箱一个值,或者如果 struct 确实有一个父类,您也可以使用它来将它包装在堆中(装箱)。

最佳答案

Java 与您描述的非常相似。

int[] hello = new int[5]; // reference hello is on stack, the object is on the heap.
hello[0] = 2; // Java puts this value directly in same slot and doesn't 
              // create a wrapping object.

关于c# - Java 是如何处理原始类型数组的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10820787/

相关文章:

c# - 使用 ViewData 的 ASP.NET MVC Html.Display()?

java - 在 Spring Boot 中自动重新加载新类

java - Equinox 如何提供非锁定 jar 文件

python - 按列对python数组/recarray进行排序

arrays - 如何使用where子句检查postgres数组中是否存在值

c# - C#中如何通过多层代码使用事务

c# - 模拟 DbSet.toList

c# - 在大型 Asp.net 应用程序中更改每个控件,如 TextBox 的最大长度

java - 如何将 LocalDateTime 转换为 com.google.protobuf.Timestamp?

javascript - 如何将数组作为参数传递给 Angularjs 中的 $http.get