java 面向对象 传递参数_Java参数传递

Java支持两种数据类型:基本数据类型和引用数据类型。

原始数据类型是一个简单的数据结构,它只有一个与之相关的值。 引用数据类型是一个复杂的数据结构,它表示一个对象。

原始数据类型的变量将该值直接存储在其存储器地址处。使用对象和引用变量时会有所不同。Java中的所有参数都通过值传递。

当参数是原始数据类型时,实际参数的值将复制到参数。

在方法主体中对参数值进行的任何更改只会更改形式参数的副本,而不会更改实际参数的值。当参数通过参考值传递时,存储在实际参数中的参考被复制到形式参数。 实际参数和形式参数都指向内存中的相同对象。

可以将另一个对象的引用分配给方法主体中的形式参数。

示例

下面的代码演示了Java中的引用传递机制。

class Phone {

public String model = "Unknown";

public int year = 2016;

public double price = 0.0;

}

public class Main {

public static void main(String[] args) {

Phone myPhone = new Phone();

myPhone.model = "iPhone";

myPhone.year = 2018;

myPhone.price = 16000.0;

System.out.println("#1: model = " + myPhone.model + ", year = "

+ myPhone.year + ", price = " + myPhone.price);

Main.test(myPhone);

System.out.println("#4: model = " + myPhone.model + ", year = "

+ myPhone.year + ", price = " + myPhone.price);

}

public static void test(Phone xPhone) {

System.out.println("#2: model = " + xPhone.model + ", year = "

+ xPhone.year + ", price = " + xPhone.price);

// Let's make xyCar refer to a new object

xPhone = new Phone();

System.out.println("#3: model = " + xPhone.model + ", year = "

+ xPhone.year + ", price = " + xPhone.price);

}

}

上面的代码生成以下结果。

#1: model = iPhone, year = 2018, price = 16000.0

#2: model = iPhone, year = 2018, price = 16000.0

#3: model = Unknown, year = 2016, price = 0.0

#4: model = iPhone, year = 2018, price = 16000.0

注意

当引用类型参数传递给方法时,形式参数可以访问对象,实际参数也可以访问该对象。

形式参数可以通过直接更改实例变量的值或通过调用对象上的方法来修改对象。通过形式参数对对象进行的任何修改都可以通过实际参数立即可见,因为它们都保存对内存中同一对象的引用。形式参数本身可以被修改以引用方法内的另一个对象。

要禁用将引用类型形式参数更改为引用不同对象的方法,请在引用类型形式参数声明中使用关键字final。

public class Main {

public static void main(String[] args) {

Phone myPhone = new Phone();

myPhone.model = "iPhone";

myPhone.year = 2017;

myPhone.price = 16000.0;

Main.test(myPhone);

}

public static void test(final Phone xPhone) {

System.out.println("#2: model = " + xPhone.model + ", year = "

+ xPhone.year + ", price = " + xPhone.price);

// Let's make xyCar refer to a new object

//xPhone = new Phone();

}

}

class Phone {

public String model = "Unknown";

public int year = 2014;

public double price = 0.0;

}

上面的代码生成以下结果。

#2: model = iPhone, year = 2017, price = 16000.0

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值