java 传值为不可变_Java参数(局部变量)传值、可变参数(int ...x)的使用

Java参数传值:

特点:

1、参数属于局部变量;

2、当对象调用方法时,参数被分配内存空间,同时要求对象为参数传值才能进行使用,即方法被调用时,参数变量必须有具体的值;

如下代码演示:在代码中,pv.tests() 是错误的,对象调用方法时,并没有为参数进行传值 ;

public class Pass_Value_Test {

int tests(int x,int y){

int sum = x+y ;

return sum;

}

public static void main(String[] args) {

//计算x+y的值

Pass_Value_Test pv = new Pass_Value_Test();

System.out.println(pv.tests(1, 10)); //正确

System.out.println(pv.tests()); //错误

}

pv.tests() 报错:The method tests(int, int) in the type Pass_Value_Test is not applicable for the arguments ()

一、基本数据类型参数的传值

基本数据类型参数的传值,该传值的类型级别不能高于该参数的级别,如不能用 float 类型的值进行传值给 int类型 的参数;

如下代码演示:  11.11f 和 111.111f 的级别高于 int x 和 int y , 所以报错;

public class Pass_Value_Test {

int tests(int x,int y){

int sum = x+y ;

return sum;

}

public static void main(String[] args) {

//计算x+y的值

Pass_Value_Test pv = new Pass_Value_Test();

System.out.println(pv.tests(1, 10)); //正确

pv.tests(11.11f, 111.111f); //错误

}

pv.tests(11.11f, 111.111f);

报错:The method tests(int, int) in the type Pass_Value_Test is not applicable for the arguments (float, float)

二、引用类型参数的传值

Java引用数据类型包括:数组、对象、接口等等;当参数是引用类型时,“ 传值 ” 传递的是变量中存放的引用,而不是变量所引用的实体;

以下代码通过  引用类型参数 为 对象 进行演示:

//创建电池类,battery

class battery {

int electricityAmount ; //创建成员变量,代表电池的剩余电量

battery(int amount){ //参数 int类型 amount

electricityAmount = amount ;

}

}

//创建收音机类,radio

class radio {

//声明方法,计算电池使用量

void openRadio(battery bt){ //创建引用类型参数:bt对象,此时对象只是声明,不具有引用和实体

bt.electricityAmount = bt.electricityAmount - 10 ; //每次调用openRadio方法,电量就减10

}

}

//创建主类

public class Pass_Value_Test {

public static void main(String[] args) {

//测试 引用类型参数的传值

//创建三个类,一个电池类Battery ,一个收音机类 Radio,一个测试类 主类

battery bas = new battery(100); //设置初始电量为 100 ;

System.out.println("电池电量为:"+bas.electricityAmount);

System.out.println("开始使用收音机·····");

radio ras = new radio();

//为 引用类型参数 bt对象 进行赋值 bas对象 ,此时 bt具有bas的引用以及bas的实体了;

ras.openRadio(bas);

System.out.println("关闭收音机,电池电量剩余:"+ bas.electricityAmount);

}

}

在以上代码中, 引用类型参数  bt ,在调用 ras.openRadio(bas);  时,就具有了和 bas 一样的引用和实体,所以在进行,

bt.electricityAmount = bt.electricityAmount - 10 ; 语句的时候, bas 里面的原实体 electricityAmount 的值也会进行改变;

也就是:改变参数变量所引用的实体,那么也会导致原对象的实体发生同样的改变 ;

需要注意的是:

改变参数中存放的 “ 引用 ” 不会影响向其传值的变量中存放的 “ 引用 ” ;

以下代码演示:

//创建电池类,battery

class battery {

int electricityAmount ; //创建成员变量,代表电池的剩余电量

battery(int amount){ //参数 int类型 amount

electricityAmount = amount ;

}

}

//创建收音机类,radio

class radio {

//声明方法,计算电池使用量

void openRadio(battery bt){ //创建引用类型参数:bt对象,此时对象只是声明,不具有引用和实体

bt.electricityAmount = bt.electricityAmount - 10 ; //每次调用openRadio方法,电量就减10

//输出 此时 bt 的引用

System.out.println("bt的引用="+bt);

}

}

//创建主类

public class Pass_Value_Test {

public static void main(String[] args) {

//测试 引用类型参数的传值

//创建三个类,一个电池类Battery ,一个收音机类 Radio,一个测试类 主类

battery bas = new battery(100); //设置初始电量为 100 ;

System.out.println("bas的引用="+bas);

System.out.println("电池电量为:"+bas.electricityAmount);

System.out.println("开始使用收音机·····");

radio ras = new radio();

ras.openRadio(bas); //为 引用类型参数 bt对象 进行赋值 bas对象 ,此时 bt具有bas的引用以及bas的实体了;

System.out.println("关闭收音机,电池电量剩余:"+ bas.electricityAmount);

battery bax = new battery(100); //设置初始电量为 100 ;

System.out.println("bax的引用="+bax);

ras.openRadio(bax);

ras.openRadio(bax);

System.out.println("bax的electricityAmount:"+ bax.electricityAmount);

System.out.println("bas的electricityAmount:"+ bas.electricityAmount);

}

}

在以上代码中,在执行 ras.openRadio(bax); 时,改变了 bt 参数的引用,此时 bt 的引用和实体就 与 bas 是不一样的了;都是bas中的引用还是原来的值,不会因为 bt 的改变而发生改变;

代码执行结果:

bas的引用=Chapter_Four.battery@7852e922

电池电量为:100

开始使用收音机·····

bt的引用=Chapter_Four.battery@7852e922

关闭收音机,电池电量剩余:90

bax的引用=Chapter_Four.battery@4e25154f

bt的引用=Chapter_Four.battery@4e25154f

bt的引用=Chapter_Four.battery@4e25154f

bax的electricityAmount:80

bas的electricityAmount:90

可变参数:

1、可变参数指:在声明方法时不给出 参数列表中从某项开始直至最后一项参数的名字和个数,但这些参数的类型必须是相同的;

2、可变参数使用 " ... " 表示若干参数,并且最后一个参数必须是方法的参数列表中的最后一个参数

如下演示:

public void test( int ... x){}      //正确

public void testone(double s , int ... y){}         //正确

public void  errorone( int ... x , double y ){}    //错误,因为最后一个参数 y 不属于参数列表中 int ... x 的最后一个参数

public void  errortwo( int .... x ){}     //错误,因为可变参数使用 " ... " 表示若干参数

其中 int ... x 和 int ... y 中的 x,y 是参数列表中可变参数的 “ 参数代表 ” ;

3、参数代表可以通过下标运算来表示参数列表中的具体参数,即 x[0]、x[1]、x[2]、x[n-1]、x[n] 分别表示 x 代表的 第一个 到 第n 个参数;

如下代码演示:

public class Parameter_Test {

int sum = 0;

// 可变参数的测试

void testx(int ... x) {

for(int i=1;i

sum += x[i];

}

System.out.println("sum的值="+sum);

}

public static void main(String[] args) {

Parameter_Test pt = new Parameter_Test();

pt.testx(1,11,111,1111);

pt.testx(2,22,222,2222,22222);

}

}

代码输出:

sum的值=1233

sum的值=25921

以上代码中 :

pt.testx(1,11,111,1111);  相当于方法 testx 中参数列表个数为四个,分别为 x[0]、x[1]、x[2]、x[3]

pt.testx(2,22,222,2222,22222); 相当于方法 testx 中参数列表个数为五个,分别为 x[0]、x[1]、x[2]、x[3]、x[4]

4、Java还提供了增强的for循环,如下代码演示:

public class Parameter_Test {

int sum = 0;

// 可变参数的测试

void testx(int ... x) {

for(int i:x ){

sum += i;

}

System.out.println("sum的值="+sum);

}

public static void main(String[] args) {

Parameter_Test pt = new Parameter_Test();

pt.testx(1,11,111,1111);

pt.testx(2,22,222,2222,22222);

}

}

代码输出:

sum的值=1233

sum的值=25921

d9dad87a14fe406c42f5cb1b861915f2.png

d1358d4695d8660de2972cc1f6e682b2.png

选丶择。

发布了34 篇原创文章 · 获赞 7 · 访问量 3690

私信

关注

标签:...,Java,bas,electricityAmount,int,bt,参数,引用

来源: https://blog.csdn.net/LagerSwan/article/details/104132852

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值