Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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_C++_C_Variables_Clr - Fatal编程技术网

Java 变量的地址在执行过程中会发生变化吗?

Java 变量的地址在执行过程中会发生变化吗?,java,c++,c,variables,clr,Java,C++,C,Variables,Clr,我正在阅读变量的地址绑定,想知道在任何情况下,变量的地址在执行过程中是否会发生变化?是否会因为JVM或CLR中的垃圾收集而发生这种情况?C和C++如何?< p>如果你的代码有未定义的行为,那么所有的赌注都被关闭了,是的,它可能会发生。 但是在有效的C/C++程序中,变量的地址不会改变 如果您的代码有未定义的行为,则所有赌注都将被取消,是的,它可能会发生。 但是在有效的C/C++程序中,变量的地址不会改变 在有效的C/C++程序中,除非您的代码故意或以其他方式更改变量的地址,否则执行环境不会更改地

我正在阅读变量的地址绑定,想知道在任何情况下,变量的地址在执行过程中是否会发生变化?是否会因为JVM或CLR中的垃圾收集而发生这种情况?C和C++如何?

< p>如果你的代码有未定义的行为,那么所有的赌注都被关闭了,是的,它可能会发生。
但是在有效的C/C++程序中,变量的地址不会改变

如果您的代码有未定义的行为,则所有赌注都将被取消,是的,它可能会发生。

但是在有效的C/C++程序中,变量的地址不会改变

在有效的C/C++程序中,除非您的代码故意或以其他方式更改变量的地址,否则执行环境不会更改地址。

在有效的C/C++程序中,除非您的代码故意或以其他方式更改变量的地址,执行环境不会更改地址。

它不太可能更改,但不要以不会更改的假设为基础编写代码。

它不太可能更改,但不要以不会更改的假设为基础编写代码。

在Java中,某些类型变量的地址可能会更改(例如静态或实例字段),而其他人通常不能(如局部变量)。对于当前一代JVM,线程堆栈位于堆外的内存段中,GC不会移动它们


然而,这对于“获取变量的地址”是没有意义的,因为在Java中不能这样做。(如果可以,那么GC将负责处理重新定位。)

在Java中,某些类型变量的地址可以更改(例如静态或实例字段),而其他类型变量的地址通常不能更改(例如局部变量)。对于当前一代JVM,线程堆栈位于堆外的内存段中,GC不会移动它们


然而,这对于“获取变量的地址”是没有意义的,因为在Java中不能这样做。(如果可以的话,那么GC有责任处理搬迁问题。)

这在很大程度上取决于语言和更改地址的含义。在C++中,对象的地址是唯一标识它的对象,它们不能被移动。一些托管语言(包括Java和C#)使用分代垃圾收集器在内存中移动对象(在分代GC中,对象将随时间从一代移动到另一代),但事实是您不应该在意:在那些可以获取对象地址的语言中,地址是固定的,在地址固定的情况下,地址不是对象可感知状态的一部分


还要注意,我在这里使用的是对象,而不是变量,因为我相信这就是您感兴趣的内容。对象和变量之间有一条细线,例如,在Java中,引用是可以用来访问对象的变量。但是我甚至不想去讨论这两种语言的精确定义…

这在很大程度上取决于语言和你所说的更改地址的意思。在C++中,对象的地址是唯一标识它的对象,它们不能被移动。一些托管语言(包括Java和C#)使用分代垃圾收集器在内存中移动对象(在分代GC中,对象将随时间从一代移动到另一代),但事实是您不应该在意:在那些可以获取对象地址的语言中,地址是固定的,在地址固定的情况下,地址不是对象可感知状态的一部分


还要注意,我在这里使用的是对象,而不是变量,因为我相信这就是您感兴趣的内容。对象和变量之间有一条细线,例如,在Java中,引用是可以用来访问对象的变量。但我甚至不会尝试去深入到任何一个的精确定义…

基本上,变量继续引用程序执行时间中相同的值或内存位置。但这是可以更改的,使其
未初始化(具有未定义的值),因此尚未明确指定特定值。这可能会产生不可预测的结果。为了处理这样的问题,只有在第一次使用变量时才可以分配内存中变量所需的空间,在不再需要变量时才释放该变量。

基本上,变量在程序执行时继续引用相同的值或内存位置。但这是可以更改的,使其
未初始化(具有未定义的值),因此尚未明确指定特定值。这可能会产生不可预测的结果。为了处理这样一个问题,内存中变量所需的空间可以只在变量首次使用时分配,并且在不再需要时释放。

< P> C++中地址不会改变。

注意,在C++中,可以对类Tyo变量重写“and”运算符,因此即使地址不会改变,您可能从变量中得到的值可能会改变(这不是地址改变,但可能会混淆)

C++中地址不会改变。


注意,在C++中,可以对类Tyo变量进行重写,因为即使地址不会改变,变量和变量的值可能会改变(这不是地址改变,但可能会混淆)

在C/C++程序中,对象的地址不能改变。内容可以复制或移动,但地址是唯一标识对象的,不能更改。不在正确的程序中,不在表现出未定义行为的程序中(除非你是那些认为未定义行为可能会在你回家时为你提供晚餐或导致恶魔在你的邻居中繁殖的人之一…@DavidRodríguez dribeas:从技术上讲,未定义的行为可能会在你回家时为你提供晚餐,或导致恶魔在你的鼻腔中繁殖