Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这两种创建树贴图(或任何贴图)的方法有什么区别?_Java_Mapping - Fatal编程技术网

Java 这两种创建树贴图(或任何贴图)的方法有什么区别?

Java 这两种创建树贴图(或任何贴图)的方法有什么区别?,java,mapping,Java,Mapping,我正在阅读一个项目中的一些代码,遇到了以下代码行: private Map<String, Map<String, List<String>>> wordbatch; 私有映射wordbatch; 在代码中,我进一步了解了构造函数中的另一行代码: wordbatch = new TreeMap<String, Map<String, List<String>>>; wordbatch=newtreemap; 这一行代

我正在阅读一个项目中的一些代码,遇到了以下代码行:

private Map<String, Map<String, List<String>>> wordbatch;
私有映射wordbatch;
在代码中,我进一步了解了构造函数中的另一行代码:

wordbatch = new TreeMap<String, Map<String, List<String>>>;
wordbatch=newtreemap;
这一行代码会有同样的效果吗

Map<String, Map<String, List<String>>> wordbatch = new TreeMap<String, Map<String, List<String>>>();
Map wordbatch=newtreemap();
这一行代码与上面两行代码有什么区别


非常感谢您的帮助,非常感谢。试图增进我对地图的了解。

你所说的话之间有一些细微的差别

在第一种情况下,在第X行声明一个实例变量(其值为
null
),在第Y行的代码中的某个地方,给它另一个值,一个新映射

在第二种情况下,您同时声明并给它一个值。然而,这在哪里发生是很重要的

  • 如果将完整声明放在原始声明所在的位置,在X行,那么它仍然是一个实例变量。然而,
  • 您忘记了您的
    private
    。如果您不希望同一个包中的其他类直接使用该变量,这可能很重要
  • 如果代码的任何部分依赖于此变量在开始时可能为null的事实(查找检查此变量是否为null的代码),那么您可能通过在声明中初始化它来引入错误
  • 如果将该声明放在原始赋值所在的第Y行,则不再声明实例变量。这将成为一个局部变量。代码的其余部分(期望此实例变量存在)将产生编译错误。实例变量必须在任何方法或构造函数之外声明

请注意,如果Y行在构造函数中,并且它是唯一的构造函数,那么这两种初始化方式几乎没有区别。

在您介绍的语句之间有一些细微的区别

在第一种情况下,在第X行声明一个实例变量(其值为
null
),在第Y行的代码中的某个地方,给它另一个值,一个新映射

在第二种情况下,您同时声明并给它一个值。然而,这在哪里发生是很重要的

  • 如果将完整声明放在原始声明所在的位置,在X行,那么它仍然是一个实例变量。然而,
  • 您忘记了您的
    private
    。如果您不希望同一个包中的其他类直接使用该变量,这可能很重要
  • 如果代码的任何部分依赖于此变量在开始时可能为null的事实(查找检查此变量是否为null的代码),那么您可能通过在声明中初始化它来引入错误
  • 如果将该声明放在原始赋值所在的第Y行,则不再声明实例变量。这将成为一个局部变量。代码的其余部分(期望此实例变量存在)将产生编译错误。实例变量必须在任何方法或构造函数之外声明

请注意,如果Y行在构造函数中,并且它是唯一的构造函数,那么这两种初始化方式几乎没有区别。

这是相同的。就像
inti;i=1。您可能错过了响应的第一个构造函数存储库上的
()
。然而,每当我试图用一行代码操作前两行代码时,我都会收到错误。当我添加一行代码时,由于某种原因,我会在程序的其余部分之后出现错误。我认为两者是一样的。如果它在声明站点初始化,你可以在构造函数中使用它,如果不是,那么你必须在使用它之前先初始化它。但实际上,它们的行为是一样的。通常,如果任何实例字段的构造不依赖于构造函数参数,则应直接对其进行初始化。如果共享错误消息,可能会有所帮助。在第一种方法中,我唯一能看到的是构造函数调用中缺少的
()
;谢谢大家的支持,也一样。就像
inti;i=1。您可能错过了响应的第一个构造函数存储库上的
()
。然而,每当我试图用一行代码操作前两行代码时,我都会收到错误。当我添加一行代码时,由于某种原因,我会在程序的其余部分之后出现错误。我认为两者是一样的。如果它在声明站点初始化,你可以在构造函数中使用它,如果不是,那么你必须在使用它之前先初始化它。但实际上,它们的行为是一样的。通常,如果任何实例字段的构造不依赖于构造函数参数,则应直接对其进行初始化。如果共享错误消息,可能会有所帮助。在第一种方法中,我唯一能看到的是构造函数调用中缺少的
()
;谢谢大家的支持,谢谢大家的解释。修复了程序中的错误并区分了两个细微的差异。谢谢我只想感谢你的解释。修复了程序中的错误并区分了两个细微的差异。谢谢