黑马程序员技术交流社区

标题: 关于引用类型的问题 [打印本页]

作者: 冷锋也温柔    时间: 2014-8-30 22:40
标题: 关于引用类型的问题
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性吗?为什么,能不能详细解释下
作者: 玥夜    时间: 2014-8-30 23:06
  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. }
复制代码

作者: 冷锋也温柔    时间: 2014-8-30 23:48
谢谢了  运行看到结果了  精辟
作者: 低调小邦    时间: 2014-8-31 00:16
基础知识很扎实
作者: yjiang_09    时间: 2014-8-31 02:00
肯定可以啊。
作者: 笑脸迷人    时间: 2014-8-31 07:07
只要对象中提供有修改属性的方法,而且权限足够,就能修改

作者: 奋发吧小白    时间: 2014-8-31 07:32
当做参数被传递!对象的属相不会被改变!因为对象在被创建时,属性已经确定!被改变的只是,对象的变量!
作者: 嘿~~    时间: 2014-8-31 08:06
  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的指向,这个改变是始终有效的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2