java同一个类的两个对象分别调用类中的同一个变量,并分别赋值,为什么结果不同?

一个爱潜水的小白 2017-03-23 09:10:16
class Person {
String name;//声明字符串变量
}
class Test {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();

p1.name = "张三";
p2.name = "李四";
System.out.println(p1.name);
System.out.println(p2.name);
}
}
/*
*输出结果
*张三
*李四
...全文
2225 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你创建了两个对象,所以赋值是不影响的
Person p1 = new Person();
 Person p2 = new Person();
syx20111128 2017-03-31
  • 打赏
  • 举报
回复
简单题人就是多
wordxiao 2017-03-31
  • 打赏
  • 举报
回复
楼主好,对象是存储在堆内存中的 。每new出一个对象,就在堆内存中开辟出一个新的空间,每个对象有其类的全部成员变量与方法。他们相互独立的 ,位于不同的存储空间。所以,每一个对象都对应一个独立的变量,所以不同。建议画一下内存图。就容易理解了。
田地里的蚂蚁 2017-03-30
  • 打赏
  • 举报
回复
对同一个类,创建两个对象,虚拟机是分配两个不同地址的内存给这两个对象的,所以你两个对象分别赋值,互相之间是不影响的,或者你可以在声明变量的时候加上static静态关键字,这样这个变量是保存到静态内存区里,这样两次赋值就可以同步到这个类变量里了(我也是初学者,我是这样理解的)
cnxiaowen 2017-03-30
  • 打赏
  • 举报
回复
new 是新创建一个对象啊。 如果name是static的话,那就是后赋值会覆盖前赋值了。 static形容的属性从属于类,是公用的。 非static形容的,从属于对象。
理太偏 2017-03-30
  • 打赏
  • 举报
回复
两张人民币当然不同号了
qq609737607 2017-03-30
  • 打赏
  • 举报
回复
内存地址不一样啊 你创建了连个对象啊
py513218931 2017-03-30
  • 打赏
  • 举报
回复
这个问题之所以这么多人回答,是因为问题太简单了啊。。。楼主应该继续努力
低调滴开发 2017-03-30
  • 打赏
  • 举报
回复
new 一次就是一个新的对象,弟弟和哥哥一样吗
early的牙膏兄 2017-03-27
  • 打赏
  • 举报
回复
好多热心大神...
半城煙沙 2017-03-27
  • 打赏
  • 举报
回复
只要出现new关键字,就是两个不同的对象,内存中会给这两个对象分配空间,两个对象不发生任何关系。
ZeWe 2017-03-26
  • 打赏
  • 举报
回复
这个吧,建议你要看一些基础的书,面向对象,就是创建不同的实例虽然它们属性是一样的,但它们是两个对象,互不干涉的
freetmf 2017-03-26
  • 打赏
  • 举报
回复
如果是 static String name的话,那么结果就是一样的,这个叫做类变量。如果没有static的话,那么结果就会不同,因为对应不同的对象,他们是不同 的。
  • 打赏
  • 举报
回复
请理解static关键字的用法
class Person {
static String name;//声明字符串变量
}

public class Test {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();

p1.name = "张三";
p2.name = "李四";
System.out.println(p1.name);
System.out.println(p2.name);
}
}
//输出
//李四
//李四
  • 打赏
  • 举报
回复
引用 2 楼 cfy990724 的回复:
调用的不都是一个对象吗?。。。。
调用的不是一个变量,你new关键字的时候,其实是创建了两个内存地址不一样的Person
mayiaihuangluo 2017-03-26
  • 打赏
  • 举报
回复
楼主加个好友一起学习可否。。我一个人自学有点焦灼qq1751407828
安正勋 2017-03-24
  • 打赏
  • 举报
回复
楼主你好,你写得下面这两条语句: Person p1 = new Person(); Person p2 = new Person(); 说明你已经创建了两个 Person,然后你又分别对其进行赋值, p1.name = "张三"; p2.name = "李四"; 这说明两个 Person 对象,都有了自己的 name,因此在输出的时候,就会有不能的结果啦! 举一个形象点的例子: 一对父母,生了两个孩子,这就想到于创建了两个 Person, 然后分别为其雨涵、雨诺,这就相当于为其赋了 name 的值, 咱们这两个孩子,你们叫什么名字啊?得到答案,就相当于输出啦!
galiniur0u 2017-03-24
  • 打赏
  • 举报
回复
楼主的Java水平有待提高啊,明显是两个变量,其内存地址都不一样。怎么可能得到一样的值。
MikeDDT009 2017-03-24
  • 打赏
  • 举报
回复
你这个是。。。。类是模板,对象是实例,用不严谨的来说(虽然也不清楚严谨是什么样就是了)一个人生了两个孩子,这两个孩子一样么。new一个就是另外一个地方了。同样是新学,提示要注意= 与== 对引用类型的作用
110成成 2017-03-24
  • 打赏
  • 举报
回复
应该去了解下类,对象、实例。
加载更多回复(6)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧