首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决Java中调用引用工具中具有值的变量的更改内容?

如何解决Java中调用引用工具中具有值的变量的更改内容?
EN

Stack Overflow用户
提问于 2022-06-09 04:29:27
回答 2查看 63关注 0票数 1

我编写了以下代码:

代码语言:javascript
复制
class Numbers
{

    int temp,a1,b1;

    void swapping(){
        temp = a1;
        a1 = b1;
        b1 = temp;
        System.out.println("In numbers class value of a after swapping ="+a1 + " and that of b=" + b1);
    }
}
代码语言:javascript
复制
public class Swap{

    public static void main(String[] args) {
        int a=2;
        int b=3;
        System.out.println("In swapping class value of a before swapping ="+a + " and that of b=" + b);

        Numbers num = new Numbers();        

        num.a1= a;
        num.b1= b;
        num.swapping();
        System.out.println("In swapping class value of a after swapping ="+a + " and that of b=" + b);
    }

}

现在,在void ()中的a1和b1的值与在a1和b1上实现交换操作之后的虚拟println语句相同。这与调用交换函数之前在主函数中打印的值相同。但是,函数调用后的main函数中的println语句显示了交换的值。假设由于Java编译器中一些不可预见的异常而存储了一些垃圾值,而不是交换值,那么如何将其更改为所需的任何值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-09 05:50:10

这里的诀窍是理解Java有两个并行的类型系统

在您的代码中:

代码语言:javascript
复制
num.a1 = a;

…您正在从a复制2的数量,并将该数量放入a1中。在执行该语句之后,aa1是独立的。它们是两个独立的数字,两个独立的值,彼此不知道。这是因为他们是原始人。

在您的代码中:

代码语言:javascript
复制
Numbers num = new Numbers();   

…你换了OOP类型的系统。这里实例化了一个Numbers对象,这意味着您在其他地方抓取了一段内存,在该内存中为该类中定义的三个原语开辟了空间。您还为类定义中存在的名为swapping的方法的实现开辟了参考空间。

从内存中浮动的实例化Numbers对象到名为num的局部变量进行引用(或链接或指针)。

当您调用swapping方法时,该代码处理存储在对象中的a1b1原语值。该代码不知道存在于对象之外的ab变量,这些变量仅在main方法中本地存在。

因此,在swapping代码完成后,您可以将JVM中的内存想象成如下图所示。交换后,ab变量将保持原来的状态,不受任何影响。只触及a1b1变量(和temp)。

因此,单独作用域中的代码可以共享对同一个对象的引用。但是,单独作用域中的代码不能共享完全相同的原始变量,它们只能获得另一个原始变量的值的副本。

票数 1
EN

Stack Overflow用户

发布于 2022-06-09 04:40:51

代码语言:javascript
复制
System.out.println("In swapping class value of a after swapping ="+a + " and that of b=" + b);

您只是在这里打印a和b变量。因为在swap类中的任何地方都没有重新分配a和b。将代码更改为打印num.a1num.b1,您将看到num对象的值已更改。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72554746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档