参数传值
在方法中很重要的一部分就是方法的参数,在方法里面的参数属于局部变量,当对象调用方法的时候,参数就被分配了存储空间,如果是含参数的方法,在调用的时候要有参数的传递值,没有参数的方法另说
传参的机制
在JAVA中.方法中的参数都是被传入值的,也会是说,方法调用者想传递什么样的数值(A)就传递什么数值给这个参数(B),在方法中无论这个传入的参数(B)怎么变,都不影响数值A,
基本数据类型的参数的传递
一般来讲,如果方法中定义传入参数的数据类型,那么调用方法的时候,就要传递什么类型的参数,(但是在出传递的时候也有例外,对于基本类型的数据参数,在传递的时候,传递的参数的级别不可以高于规定的参数的级别,首先是要同种类型)
比方说:
public class example(int a){
//省略
}
这时候我们规定的是int 就不能传递这个以外的,可以传递short,
基本数据类型(四类八种)
可要参考下表
名称 | 范围 | 字节大小 |
---|---|---|
byte | -2^7~2^7-1 | 1字节 |
short | -2^15~2^15-1 | 2字节 |
int | -2^31~2^31-1 | 4字节 |
long | -2^63~2^63-1 | 8字节 |
char | 字符型 | 2字节 |
float | 单精度 | 4字节 |
double | 双精度 | 8字节 |
boolean | 布尔型 | 1字节 |
数值型大小排序:byte<short<int<long<float<double
注意:不是说如果规定的是double ,那么前面低于double的都可以作为传入的参数,要看数据类型
字符型可以自动转化为int型,即char<int<long<float<double
每一位的二进制位称之为一个比特位,记作bit
每八位二进制位称之为一个比特,记作byte。1byte = 8 bit
byte型底层实现:左边第一位代表符号位,此外1000 0000 不代表-0而代表-128,所以范围-128~127
float底层实现:左边第一位代表符号位,左边第二位代表整数位,后面七位代表幂次,后面23位代表小数位
引用数据类型的参数的传值
首先说一下什么引用数据类型,包括数组,对象,以及还没有学习到的接口,当参数时引用数据类型的时候,传值传递的是变量的"引用"(按照我的理解就是变量存放的物理地址)Ps:欢迎批评指正
也就是说,声明两个对象都用了相同的引用,其中一个改变,另外一个也随着改变
举比方打个例子
类
public class Radio {
void Radio(Battery battery){
battery.ElectricityLevel=battery.ElectricityLevel-10;
}
}
类
package com.day08;
public class Battery {
int ElectricityLevel;
Battery(int a){
ElectricityLevel=a;
}
}
测试类
package com.day08;
public class testTheRadio {
public static void main(String[] args) {
//创建南孚对象并且赋初值
Battery nanfu = new Battery(100);
System.out.println("当前南孚的电量:"+nanfu.ElectricityLevel);
Radio radio=new Radio();
System.out.println("收音机使用南孚电池");
radio.Radio(nanfu);
System.out.println("现在的电量:"+nanfu.ElectricityLevel);
}
}
可变参数------>底层是数组
什么是可变参数呐,我们之前见过的含参数的方法的构造,传递参数是一般参数的类型和个数都是已知的,但是可变参数就不是,再声明方法的时候时候不给出参数的个数,只知道参数的类型。
举比方打个例子
public void A(int ...x){}
上面的意思就是在A的参数的列表中,从第一个到最后一个都是int类型
public void B(float k,int...x)
意思就是在参数列表里面第一个是float,然后从第二个开始到最后一个都是int
注意:
x是一个代表,它代表参数列表的最后一个元素,所以在使用时的时候...x的后面没有任何参数
值的注意的是,在JAVA里面提供增强的for语句来遍历参数代表X代表的参数
for(声明的循环变量:代表参数){
}