关于Java中的局部变量
我有一个关于Java中局部变量的快速问题: 如果在声明一个局部变量时,我将其指向一个实例变量,那么该局部变量是作为对该实例变量的引用,还是作为一个临时的深度副本 换句话说,如果我在新初始化的局部变量上调用修饰符方法,局部变量是否会作为引用并在实例变量上调用修饰符,它会修改局部变量指向的复制版本,还是不能在局部变量上调用修饰符方法 例如 公共静态>布尔ISORTED(堆栈s){ …(一堆代码) else if(DynamicCarrayStack的实例) { …(一堆代码) DynamicArrayStack tempStack=(DynamicArrayStack)s; elem=(E)tempStack.pop() …(一堆代码) } …(一堆代码) } 在“tempStack”上调用pop()是否也会导致在参数“s”指向的堆栈实例上调用pop()?还是只会影响我的“临时堆栈”的内容 如果在声明一个局部变量时,我将其指向一个实例变量,那么该局部变量是作为对该实例变量的引用,还是作为一个临时的深度副本 第一种选择。Java不会隐式地创建对象的深度副本。您拥有的是对实例对象的临时引用,实例变量也会引用该对象 如果在声明一个局部变量时,我将其指向一个实例变量,那么该局部变量是作为对该实例变量的引用,还是作为一个临时的深度副本关于Java中的局部变量,java,Java,我有一个关于Java中局部变量的快速问题: 如果在声明一个局部变量时,我将其指向一个实例变量,那么该局部变量是作为对该实例变量的引用,还是作为一个临时的深度副本 换句话说,如果我在新初始化的局部变量上调用修饰符方法,局部变量是否会作为引用并在实例变量上调用修饰符,它会修改局部变量指向的复制版本,还是不能在局部变量上调用修饰符方法 例如 公共静态>布尔ISORTED(堆栈s){ …(一堆代码) else if(DynamicCarrayStack的实例) { …(一堆代码) DynamicArra
第一种选择。Java不会隐式地创建对象的深度副本。您拥有的是对实例对象的临时引用,实例变量也会引用它。它的所有引用。因此,您提到的pop也会影响s,因为它是同一个对象。它的所有引用。因此,您提到的pop也会影响s,因为它是同一个对象。简短回答:是的,
s
和tempStack
是引用同一实例的两个变量
调用
tempStack.pop()
与调用s.pop()
是相同的,因为两者都引用相同的对象。简短回答:是的,s
和tempStack
是引用相同实例的两个变量
调用
tempStack.pop()。但它不会更改在isSorted中传递的对象,因为参数在Java中是按值传递的
因此,如果你有:
Stack myStack = new Stack()
...
isSorted(myStack);
不会修改对象myStack。但是,如果在您的方法中对s和tempStack进行排序,则会
我的意思是:
s.pop()
将与相同
tempStack.pop()
两个变量都引用同一对象,因此都将修改同一对象
我想再澄清一点
请注意,它将更改s和tempStack(因为引用的是同一个元素)。但它不会更改在isSorted中传递的对象,因为参数在Java中是按值传递的
因此,如果你有:
Stack myStack = new Stack()
...
isSorted(myStack);
不会修改对象myStack。但是,如果在您的方法中对s和tempStack进行排序,则会
我的意思是:
s.pop()
将与相同
tempStack.pop()
两个变量都引用同一对象,因此都将修改同一对象
我想再澄清一点
向您问好,是的。请记住,java使用的是指针,而不是值。所以当你说
tempStack=s
tempStack实际上获取s的值,但在java中,该值是一个指针
现在tempStack和s都指向相同的数据
如果使用tempStack.pop(),则与使用s.pop()一样,反之亦然。是。请记住,java使用的是指针,而不是值。所以当你说
tempStack=s
tempStack实际上获取s的值,但在java中,该值是一个指针
现在tempStack和s都指向相同的数据
如果使用tempStack.pop(),则与使用s.pop()一样,反之亦然。在您的示例中,“tempStack”和“s”都指向同一个DynamicArrayStack实例(如果它是DynamicArrayStack)
为了使“tempStack”按程序员期望的方式运行,您需要首先在“s”上调用某种克隆/复制方法
Object类(所有其他类都必须从中扩展)为此提供了“clone”方法,但应该警告您,使用此方法被认为是不好的做法,因为它不提供深度副本,因此可能会引入一些古怪的bug;您应该使用。在您的示例中,“tempStack”和“s”都指向同一个DynamicArrayStack实例(如果它是DynamicArrayStack)
为了使“tempStack”按程序员期望的方式运行,您需要首先在“s”上调用某种克隆/复制方法
Object类(所有其他类都必须从中扩展)为此提供了“clone”方法,但应该警告您,使用此方法被认为是不好的做法,因为它不提供深度副本,因此可能会引入一些古怪的bug;您应该改用a。欢迎使用堆栈溢出!你可能想阅读一些关于有效提问的提示。主要是,您的问题标题模棱两可,并且您包含的示例代码并不能很好地补充您的问题。欢迎使用Stack Overflow!你可能想阅读一些关于有效提问的提示。主要是,您的问题的标题模棱两可,并且您所包含的示例代码并不能很好地补充您的问题。它们都包含对同一对象的引用。局部变量不引用实例变量本身。如果实例变量更改为指向新对象