Discuss / Java / 谁能解释一下最后一个例子

谁能解释一下最后一个例子

Topic source

Ljm68077

#12 Created at ... [Delete] [Delete and Lock User]

说白了就是b=Alice这个值并没有通过set方法把值赋进去,你的名字从张三改成了李四,但是身份证的名字仍然是张三,那么get方法看的还是你身份证

roc_cn

#13 Created at ... [Delete] [Delete and Lock User]

String bob = "Bob"; //等效写法:String bob = new String("Bob");  此时 bob变量指向的是 new出来的字符串对象的内存地址

p.setName(bob); // 传入bob变量;等效于将p中的类变量 name,设置为跟bob一样的内存地址。注意,name其实是指向的一个内存地址

bob = "Alice"; // bob改名为Alice;等效于 bob = new String("Alice"); 此时bob变量指向一个新的new出来的字符串对象内存地址,里面放的是 Alice

// 同时,p中的类变量name,还是指向的之前"Bob"字符串的内存地址

java把C++里的指针概念模糊了,其实这里就是C++里的 string *bob = new string("Bob");  p.name = bob; bob = new string("Alice");

游轶yooyi

#14 Created at ... [Delete] [Delete and Lock User]

String是引用类型!

之前没有 认真看 数据类型 那里 说的很清楚 字符串 不看改变 改变都是 另外开辟地址

用学过的来说难道不是因为p.getName()里面只有return没有赋值吗

String 是字符串类型,如果要改变值,需要新建一个内存空间,然后指向到这个空间

String[] 是字符串数组,如果改变其中的值,并不会创建新的内存空间,改变的只是索引后的值。

前面说到的java有两大基本类型,基本类型和引用类型。然后又说了引用类型赋值改变的是同个对象,而String是个特殊的引用类型,赋值其实是会开辟新的内存空间,所以改变的不是同个对象,所以对person.getName()没有影响,若有不对的地方欢迎各位指正

Binary_三行

#19 Created at ... [Delete] [Delete and Lock User]

String 属于引用类型,每次赋值实际上是又开辟了一片空间,所以他的指向地址发生了变化。

传递参数属于引用传递,也就是地址,所以两次输出信息一样。

举个例子:你家地址是101,你叔叔知道你家的地址为 101,你叔叔来你家就是通过地址才能过来,有天你搬家了,告诉你叔叔你家的新地址,他来你家做客是不是就是通过新地址?

数组对象和string对象不一样。

两次都是赋值。第一个是String name[]数组,所以是连续的两个地址,即name0 name1  name2是分别指向不同的String对象,name数组是一个对数组象,所以实际上是两个引用指向了同一个数组对象,修改其中一个数组对象中的一个引用,所以就改变了。


  • 1
  • 2

Reply