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);
}
}
/*
*输出结果
*张三
*李四
...全文
2213 26 打赏 收藏 转发到动态 举报
写回复
用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)
1. 内容概要 本项目是一个支持科学函数的命令行计算器,兼容 C++98 标准。它实现了中缀表达式词法分析、后缀表达式转换与求值,支持常见数学运算(如幂、三角函数、对数等)与括号优先级解析。程序还提供了角度版三角函数、角度与弧度互转功能,并支持函数调试输出与函数演示模式。 2. 适用人群 * C++ 初中级学习者,特别是希望深入理解表达式求值机制者 * 需要一个可扩展的计算引擎的项目开发者 * 想通过项目实践词法分析、调度场算法、数学函数封装的开发者 * 高校学生课程设计、编译原理实践者 3. 使用场景及目标 * 实现中缀表达式的完整求解器,支持函数嵌套、优先级与结合性处理 * 提供角度与弧度版本的三角函数,以适应不同输入偏好 * 演示中缀转后缀过程,辅助编程教育与算法教学 * 提供科学函数辅助计算,如 `log`, `sqrt`, `abs`, `exp`, `ceil`, `floor` 等 4. 其他说明 * 支持函数:sin, cos, tan(弧度);sind, cosd, tand(角度) * 支持函数嵌套,如 `sin(deg2rad(30))` * 支持操作符:+, -, \*, /, ^, \*\*(幂运算)与括号优先级 * 所有函数均通过 map 注册,方便扩展与自定义 * 输入 `help` 查看支持函数,`demo` 观看转后缀过程,`quit` 退出程序 * 提示用户避免使用 `°` 符号,推荐使用角度函数代替 * 可通过 `g++ calculator.cpp -o calculator -lm` 编译(需链接数学库)
项目工程资源经过测试运行,功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会努力及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件等。资源质量优质,放心下载使用!可参考实现复现;设计报告也可借鉴此项目工程;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途,网络商品/电子资源资料具可复制性不支持退款。质量优质,放心下载使用。

62,635

社区成员

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

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