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; }
|
引用传递的本质是传递内存空间地址,而非值本身。
示例三: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 = "小月同学"; } }
|
解析:因为字符串就是一个对象,所以“小轩同学”和“小月同学”为两个不同的对象,各自占用一个堆内存,程序刚开始时,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 = "小轩同学"; }
|
关于怎么断定值传递与引用传递
在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 |