JAVA笔记Day7


JAVA笔记-Day7


值传递与引用传递


示例一:值传递

1
2
3
4
5
6
7
8
9
public class ValueDemo{
public static void main(String[] args){
int x = 10;
method(x);
}
public static void method(int mx){
mx = 20;
}
}
1
运行之后:x=10,mx由10变为20,但是x的值不发生变化,mx对x没有影响

值传递的本质是传递变量的值


示例二:引用传递

1
2
3
4
5
6
7
8
9
10
11
12
13
public class RefDemo1{
public static void main(String[] args){
Duck d = new Duck();
method(d);
System.out.println("Duck age = "+d.age);
}
public static void method(Duck duck){
duck.age = 5;
}
}
class Duck{
int age = 2;//省略封装
}
1
运行结果:Duck age = 5

引用传递的本质是传递内存空间地址,而非值本身。


示例三:String传递

1
2
3
4
5
6
7
8
9
10
11
//字符串本身就是一个对象
public class RefDemo2{
public static void main(String[] args){
String name = "小轩同学";
method(name);
System.out.println("name="+name);
}
public static void method(String sname){
sname = "小月同学";
}
}
1
运行结果:name=小轩同学

解析:因为字符串就是一个对象,所以“小轩同学”和“小月同学”为两个不同的对象,各自占用一个堆内存,程序刚开始时,name与sname都指向“小轩同学”,在执行sname=“小月同学”时,sname所指向的地址发生了变化,但是name指向的地址没有发生变化,所以name=小轩同学


示例四:String传递

1
2
3
4
5
6
7
8
9
10
11
12
13
public class RefDemo3{
public static void main(String[] args){
Person p = new Person();
method(p);
System.out.println("person name = "+p.name);
}
public static void method(Person per){
per.name = "小月同学"
}
}
class Person{
String name = "小轩同学"; //省略封装
}
1
运行结果:person name = 小月同学

关于怎么断定值传递与引用传递


在java中的变量有基本类型变量引用类型变量,在调用方法时传递基本类型变量即为值传递,传递引用类型变量即为引用传递,java引用类型默认传递指针,在java中只有八种基本数据类型int , float , double , boolean , long , short , char , byte,这八种基本数据类型在引用时都是值传递,String等一些引用数据类型在传递时都是引用传递,基本数据类型也可以进行引用传递,将其包装成引用对象即可,例如int的引用包装对象是Integer,boolean的引用包装对象是Boolean,(开头大写)等等。。。


基本数据类型 引用包装类
int Integer
long Long
short Short
byte Byte
float Float
double Double
char Character
boolean Boolean

文章作者: 小轩同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小轩同学 !
  目录