Java更改对象属性值

Java更改对象属性值,java,Java,在此代码中 为什么打印>>0 8而不是>>5 8。 方法doIt()更改已分配的人数p,但int x已分配且在doIt()中未更改。 有人能给我一个理论上的解释吗?我正在努力理解它是如何工作的。 谢谢 诸如int之类的原语是通过值传递的,因此您在test中的x永远不会被修改;总是0。只有doIt中的本地副本x更改为5,但当方法doIt结束时,该值消失 程序中有两个x变量: 测试中的x:初始化为0且从未更改 doIt中的x:初始化为0,更改为5,从未使用过 对Person对象的引用是通过值传

在此代码中
为什么打印>>0 8而不是>>5 8。 方法
doIt()
更改已分配的人数p,但int x已分配且在
doIt()
中未更改。 有人能给我一个理论上的解释吗?我正在努力理解它是如何工作的。 谢谢

诸如
int
之类的原语是通过值传递的,因此您在
test
中的
x
永远不会被修改;总是0。只有
doIt
中的本地副本
x
更改为
5
,但当方法
doIt
结束时,该值消失

程序中有两个
x
变量:

  • 测试中的
    x
    :初始化为0且从未更改
  • doIt
    中的
    x
    :初始化为0,更改为5,从未使用过
Person
对象的引用是通过值传递的,但是
doIt
会修改原始对象中的
number
,因此它会更改为
8

程序中有两个
p
变量:

  • test
    中的
    p
    :初始化为新的
    Person
    对象<代码>编号
    初始化为0
  • doIt
    中的
    p
    :它指的是与
    test
    中的
    p
    相同的
    Person
    对象。因此,当
    doIt
    number
    更改为
    5
    时,它会修改您拥有的唯一的
    Person
    对象

诸如
int
之类的原语是通过值传递的,因此您在
test
中的
x
永远不会被修改;总是0。只有
doIt
中的本地副本
x
更改为
5
,但当方法
doIt
结束时,该值消失

程序中有两个
x
变量:

  • 测试中的
    x
    :初始化为0且从未更改
  • doIt
    中的
    x
    :初始化为0,更改为5,从未使用过
Person
对象的引用是通过值传递的,但是
doIt
会修改原始对象中的
number
,因此它会更改为
8

程序中有两个
p
变量:

  • test
    中的
    p
    :初始化为新的
    Person
    对象<代码>编号
    初始化为0
  • doIt
    中的
    p
    :它指的是与
    test
    中的
    p
    相同的
    Person
    对象。因此,当
    doIt
    number
    更改为
    5
    时,它会修改您拥有的唯一的
    Person
    对象

基本数据类型(如整数)基于值,而不是数据引用。通过在方法中设置
x=0
,这不会将测试方法中的x值设置为0,因为当x传递给
doIt
时,它只是通过值。因此,在方法中执行的任何操作都不会被记录。您必须传递一个对象,如
Person
,才能发生更改。

基本数据类型,如整数,是基于值而不是数据引用的。通过在方法中设置
x=0
,这不会将测试方法中的x值设置为0,因为当x传递给
doIt
时,它只是通过值。因此,在方法中执行的任何操作都不会被记录。您必须传递一个对象,如
Person
,才能发生更改。

因此在doIt中,x是一个副本,p是真实对象,因为x是基本体,而Person p不是?Close。在
doIt
中,
x
test
x
的副本<代码>p也是一个副本。但它是对对象引用的副本。所以
p
变量,在
doIt
test
中,都引用了唯一的
Person
对象。太棒了!谢谢!我更习惯C++,在这里我可以指定DePopIs,引用…所以doIx是一个拷贝,P是真实对象,因为X是原始的,P是不是?在
doIt
中,
x
test
x
的副本<代码>p也是一个副本。但它是对对象引用的副本。所以
p
变量,在
doIt
test
中,都引用了唯一的
Person
对象。太棒了!谢谢!我更习惯C++,在那里我可以指定DopCopy,引用…
class Person{
   int number=0;
}

class Student extends Person
{
    int studentNumber;
}

public class Prog{


    public void doIt(int x, Person p)
    {
        x=5;
        p.number=8;
    }

    public static void main(String[] args) {

       Prog p = new Prog();
       p.test();

    }

    public void test()
    {
        int x=0;
        Person p = new Person();
        doIt(x,p);
        System.out.println(x);
        System.out.println(p.number);
    }
}