当前位置: 首页 > 面试题库 >

new和make和有什么不一样?

姜兴业
2023-03-14
问题内容

New不会初始化内存,只会将其清零。它返回一个指向新分配的零值的指针。

Make 仅创建切片,地图和通道,并将其初始化返回。

在这种情况下,“初始化”是什么意思?new和make之间还有什么其他区别?


问题答案:

如制作切片,地图和通道中所述:

内置函数make需要一个type T,该类型 必须是slice,map或channel type ,还可以选择后面是特定于类型的表达式列表。
它返回类型的值T(不是*T)。

存储器按照有关初始值的部分所述进行初始化。

例如,对于切片类型

make([]T, length, capacity)

产生与分配数组和切片相同的切片,因此这两个表达式是等效的:

make([]int, 50, 100)
new([100]int)[0:50]

因此,在这里make创建切片,并根据所使用的类型(此处为int,所以0‘)根据零值初始化其内容。

您可以在Go中看到更多关于保持最新和分离的需求:为什么要make()或new()?

戴夫·切尼(Dave Cheney)刚刚写了一篇不错的文章:“
Go同时具有make和new功能,这有什么用?

尽管make创建泛型slicemapchannel值,但它们仍然 只是常规值; make不返回指针值

如果new被取消,make您将如何构造一个指向初始值的指针?

使用new构建 指针slicemapchannel 零值 今天的工作,并与行为一致new

对于混乱,它们可能引起makenew保持一致;

  • make 只制作切片,地图和通道,
  • new 只返回指向初始化内存的指针。



 类似资料:
  • 问题内容: 简介文档中有很多段落专门介绍了和之间的区别,但是实际上,您可以在本地范围内创建对象并将其返回。 为什么要使用一对分配器? 问题答案: 您可以做的事情,您无法做其他任何事情: 建立频道 创建一个预先分配了空间的地图 创建具有预分配空间或len!= cap的切片 证明有一点困难。使它变得更容易的主要事情是创建指向非复合类型的指针。以下两个功能是等效的。简而言之:

  • 在第7.2.1小节和第10.2.2小节,我们已经讨论过此问题,并使用代码进行详细说明,观点如下: - 切片、映射和通道,使用make - 数组、结构体和所有的值类型,使用new

  • 问题内容: 我是一名新的Java学习者。最近,我在阅读泛型编程,并对此感到困惑。 问题答案: 首先,这些是在不同上下文中使用的完全不同的构造。 是通用类型声明的一部分,例如 它使用类型参数声明泛型类型,并引入界限,因此必须是的子类型。 是带通配符的参数化类型,可以作为普通类型用于变量和方法声明等中: 变量声明诸如装置类型的该被参数化与一些亚型。 例如,给出此声明 您可以: 将的某些子类型分配给:

  • 问题内容: 这两个语句之间有什么区别: 和 如果您能说明差异,那就太好了。 问题答案: 第一个是创建一个新的String对象。第二个是有效地使用已经存在的(它是在加载类文件时创建的)。实际上,从来没有理由使用构造函数。 (我之所以这样说, 实际上是 因为有一种情况:如果要通过调用然后丢弃原始文件来分解大块,则可以使用此构造函数从子字符串中创建new来节省内存。这确实是一个晦涩的情况,虽然。)

  • 问题内容: 关于 Java泛型, 我有一个非常基本的问题。我想这两个和是同质的。我是对的还是我缺少的基本观念? 问题答案: 泛型类型比较古怪。 表示Number或未知的子类。如果获得这样的值,它将是,但是由于您不知道哪个有效,因此无法给出此类型的值。 区别在于参数和返回值。 在一些地方用来表示类型可以是超级类型。例如 在集合中,此方法表示比较器需要能够比较相同类型或任何超级类型。 这意味着你可以

  • 问题内容: 问题答案: 简单说明:使用时 仅可访问其中定义的公共方法。中定义的方法不是。 使用时 定义的公共方法也可以与公共方法一起访问。 两种情况下创建的对象都是相同的。 例如: