A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冷锋也温柔 中级黑马   /  2014-8-30 22:40  /  1225 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性吗?为什么,能不能详细解释下

7 个回复

倒序浏览
  1. package com.itheima;

  2. public class Demo {

  3.         public static void main(String[] args)
  4.         {
  5.                 Person p1= new Person();
  6.                 Person p2= new Person("zhangsan", 24);
  7.                 System.out.println("p1原"+p1);
  8.                 System.out.println("p2原"+p2);
  9.                
  10.                 change(p1, new String("王五"));
  11.                 change(p2, 28);
  12.                 System.out.println("p1新"+p1);
  13.                 System.out.println("p2新"+p2);
  14.         }
  15.        
  16.         private static void change(Person p, String name)
  17.         {
  18.                 p.setName(name);       
  19.         }
  20.         private static void change(Person p, int age)
  21.         {
  22.                 p.setAge(age);       
  23.         }

  24. }
  25. class Person
  26. {
  27.         Person(){}
  28.         Person(String name, int age)
  29.         {
  30.                 this.name= name;
  31.                 this.age= age;
  32.         }
  33.         private String name;
  34.         private int age;
  35.         public String getName() {
  36.                 return name;
  37.         }
  38.         public void setName(String name) {
  39.                 this.name = name;
  40.         }
  41.         public int getAge() {
  42.                 return age;
  43.         }
  44.         public void setAge(int age) {
  45.                 this.age = age;
  46.         }
  47.         @Override
  48.         public String toString() {
  49.                 return "Person [name=" + name + ", age=" + age + "]";
  50.         }
  51.        
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
天黑偷牛 + 1 很给力!

查看全部评分

回复 使用道具 举报
谢谢了  运行看到结果了  精辟
回复 使用道具 举报
基础知识很扎实
回复 使用道具 举报
肯定可以啊。
回复 使用道具 举报
只要对象中提供有修改属性的方法,而且权限足够,就能修改
回复 使用道具 举报
当做参数被传递!对象的属相不会被改变!因为对象在被创建时,属性已经确定!被改变的只是,对象的变量!
回复 使用道具 举报
  1. class MoringDemo
  2. {
  3.         public static void init(Person p){
  4.                 p.setName("lisi");
  5.                 p.setAge(15);
  6.                 System.out.println("init方法中Person的属性值::"+p.getName()+"--->>>"+p.getAge());//①
  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.                 Person p = new Person("zhangsan",10);
  11.                 init(p);
  12.                 System.out.println("调用init方法后Person的属性值::"+p.getName()+"--->>>"+p.getAge());//②
  13.         }
  14. }
  15. class Person
  16. {
  17.         private String name;
  18.         private int age;
  19.         Person(String name,int age){
  20.                 this.name = name;
  21.                 this.age = age;
  22.         }
  23.         public void setName(String name){
  24.                 this.name = name;
  25.         }
  26.         public void setAge(int age){
  27.                 this.age = age;
  28.         }
  29.         public String getName(){
  30.                 return name;
  31.         }
  32.         public int getAge(){
  33.                 return age;
  34.         }
  35. }
复制代码



①和②输出结果是一致的,可以看到调用init方法后,Perosn的属性值被该变了。
为什么呢?因为改变的是引用变量p的指向,这个改变是始终有效的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马