Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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 - Fatal编程技术网

Java 私有变量与局部函数变量

Java 私有变量与局部函数变量,java,Java,为了提高效率,我想问以下问题。例如,在C中,如果希望在函数中反复使用同一个变量,而不需要将其转换为局部变量(这需要在再次调用该函数时重新初始化该变量),则可以声明一个“全局”变量 在Java中,我不太确定什么是最好的,使用一个局部变量并一遍又一遍地重新初始化它(也许优化器足够聪明来记住它?),或者在类中单独声明它为私有变量?我的直觉告诉我后者应该更好(这就是我目前正在做的),但我不完全确定情况是否如此 当然,请排除多线程场景,在这种场景中原子性很重要。您不能直接将所有本地方法变量转换为实例变量。

为了提高效率,我想问以下问题。例如,在C中,如果希望在函数中反复使用同一个变量,而不需要将其转换为局部变量(这需要在再次调用该函数时重新初始化该变量),则可以声明一个“全局”变量

在Java中,我不太确定什么是最好的,使用一个局部变量并一遍又一遍地重新初始化它(也许优化器足够聪明来记住它?),或者在类中单独声明它为私有变量?我的直觉告诉我后者应该更好(这就是我目前正在做的),但我不完全确定情况是否如此


当然,请排除多线程场景,在这种场景中原子性很重要。

您不能直接将所有本地方法变量转换为实例变量。如果这样做,您将破坏代码


实例变量用于特定用途-定义对象的状态。您所问的问题可以通过使用静态变量来解决(也可能是最终变量,取决于具体情况)。如果您使用静态变量,它将可用于您创建的所有对象。但它会损害线程安全性,因为任何对象都可以修改它。

不要尝试在如此低的级别上调整性能。结果代码的性能在很大程度上取决于编译器,但这样一个小小的“改进”根本不会有任何显著的提高,因为您只是在谈论为变量分配一个简单的值,这并不需要花费大量的时间(如果我们讨论的是每次调用都要创建复杂对象,这显然是不同的,但您的问题是关于初始化变量的,所以我回答这个问题)

但是,将一个只与单个函数相关的变量作为类的字段,确实会损害代码的可读性和自我表达,因为该字段与该类的实例根本不相关


结论:如果变量是局部函数变量,则将其放入局部函数范围。如果是字段,则将其作为字段。不要试图以这种方式调整性能。

私有变量可在类内访问,而局部函数变量仅可在函数内访问。

答案可能会对你有所帮助。他编写了一个微型基准测试,用于确定局部变量和实例变量的访问速度


结果表明,局部变量访问比实例变量访问快约1%(即使两者都指向同一对象).

Idk,如果我很理解你的问题。但是如果它向类中添加了一些字符,并且所有对象都希望使用它,则将其用作类变量。如果函数临时将其用于某些计算等,则将其用作局部变量。Java和C具有非常相似的语法,但概念和结构非常不同。在C中,可以使用global变量可以在300个源代码文件中的任意一个文件中定义,不一定在带有main()的源代码文件中定义。它们可以在这300个源代码文件中的任何一个文件中使用。在Java中,main()只是JVM处理的某个类中的一个方法。您的类可以有仅在类中存在的静态变量。但对于JVM来说,它们仍然不是C意义上的“全局变量”。它们只是“局部”变量"C是在硬件昂贵的时候诞生的。这就是为什么他们有指针、地址、传递地址。C在性能上很好。Java诞生于硬件相对便宜的不同时代。观察性能是一种很好的做法,但不如C那么重要。我对这两方面都不是很有经验,所以我希望能有任何正确的做法对我的评论进行评论,以便我可以学习。正如我所说,我不谈论多线程场景,但我认为它有一些性能优势;我还只提到了实例变量,因为我希望每个类都有自己的本地副本。尽管该变量可能会占用大量内存,但我没有指定它的类型和“本地”副本可能会对GC间隔产生重大影响。@jtimz正如我所说,我说的是变量(它们只是一个地址或一个值,没有任何内存)。如果你说的是每次调用都创建完全相同(可能很大)的对象,那就不同了(在大多数情况下,这意味着它无论如何都应该是一个字段).但是分配一个变量(也就是分配一个对已经存在的对象的引用或分配一个基元值)与性能无关。如果你为我澄清了这一点,答案可能会有所不同(就像问题一样)。问题不是关于字段与局部变量的可访问性,而是关于什么更好(“为了效率”)。请在回答之前花点时间阅读问题。我必须注意(并且在您链接的答案中也注意到)这些差异可能不具有代表性,而且非常小。不要将代码设计决策建立在这样的基准之上。