javascript 与java方法传址方式解析

对于非基本的变量,涉及两个概念, 引用和对象实体.对象实体指的是内存中一块区域,在这个区域中存储的是对象实例化后生成的一组数据结构.而引用也是一种特殊类型的变量,可以理解为是它的名就是非基本变量的名,它的值是对象实体的内存地址.
  对于很多类型的语言,都会涉及到的一个问题,如果方法中的参数为非基本变量,它是怎样传递的,传值?传址?下面讨论一下java和javascript两种语言下的参数传递 问题.
  java
    在方法体内的非基本类型的变量引用是方法体外变量引用的一个副本,也就是说他们有相同的值(对象实体的物理内存),即指向相同的内存中的对象实体.但内存中同时也存在着两个引用.如果方法体内的对象再次创建对象,也就是下面方法change2所做的,这个时候,作为副本的引用的值就改变了,它会指向新的对象.而外面的引用并没有发生变化.
  看下面的例子.


public class A {
int a =1;
}

public class B{
public static void change1(A a) {
a.a = 2;
}
public static void change2(A a) {
a.a =2;
a = new A();
a.a = 4;
System.out.print("");
}
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
System.out.println("a1.a =" + a1.a);
System.out.println("a2.a =" + a2.a);
System.out.println("method is executed!");
change1(a1);
change2(a2);
System.out.println("a1.a =" + a1.a);
System.out.println("a2.a =" + a2.a);
}
}

结果如下:
a1.a =1
a2.a =1
method is executed!
a1.a =2
a2.a =2
其实,javascript似乎也是采用了同样的策略,两者得到结果一致.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值