java之方法传参机制

方法传参机制

  1. 成员方法传递的是值拷贝,形参的任何改变不影响实参

  2. 调用方法会产生一个新栈

  3. 数组属于引用类型,会指向堆空间

  4. 引用类型(类,数组,接口)传递的不是值拷贝,而传递的是一个地址,而形参可以影响实参

  5. 对象传递的也是地址

    //测试 A类中的方法传入(B类对象)参数,在A类的方法中改变B类对象,那么对象B是否变化
    //j结果   对象B会发生变化
    public class text {
    	public  static  void main(String[] args) {
        
    	Person  p =new Person();
    	p.name = 'jack';
    	p.age = 10;
    	
    	B b = new B();
    	b.mm(p);  //本质是将对象p的地址传给mn方法
    	 System.out.print("main中的p.age="+ p.age) ;
    	
    	}
    }
     
     class   Person {
    	 
    	 String name;
    	 int age;
     } 
     
     class B {
    	 
    		public  void   mm (Person p) {
    			p.age  = 10000;
    			/*思考如果 p=null ,则上述的结果p.age =10 ,
    			因为这里的B类的mm方法在传入对象p时,新开的mm栈地址就指向堆中p的地址,
    			而p=null,则将 mm栈地址指向空,这对堆中的p地址没有任何影响
    			*/
    			
    			/*思考如果 p=new Person , p.age  = 10000;则结果p.age =10 ,
    			因为这里的B类的mm方法在传入对象p时,新开的mm栈地址就指向堆中p的地址,
    			而p=new Person,将在堆中创建一个新对象p,p.age=10000的赋值也给了新对象,
    			当执行完此方法时,输出语句仍然在main栈中找到原本对象p的地址,指向堆中p对象中的p.age
    			而创建的新对象p,没用就销毁了
    			*/
    		} 
     }
    

//定义一个Person类,编写一个方法copyPerson,返回复制Person的一个对象,只是他们的的属性一样
public class text {
	public  static  void main(String[] args) {
    
	//创建一个对象p,并赋值
	Person p = new Person();
	p.name=" XiaoFei";
	p.age =11;
	
	//创建一个对象tool
	MyTools  tool = new MyTools();
	Person p2 = tool.copyPerson(p);// 将 复制p的对象 p2  赋给一个新创建的对象p2
	
	 System.out.print("name="+ p2.name) ;
	}
}
 
class    Person {
	
	String name;
	int   age;
}  


class   MyTools{
	
 	  public  Person copyPerson(Person p ) {
		  
		Person  p2 = new Person();  //创建p2对象,并将p的属性赋给p2的属性
		 p2.name = p.name;
		 p2.age = p.age;
		 
       return  p2;
			
	 }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值