赋值操作时候的引用传递
如下代码
class People{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "People [age=" + age + ", name=" + name + "]";
}
}
public class Temp {
public static void main(String[] args) {
//基本类型赋值操作,进行的值传递(变量名指向的是变量的副本)
int a = 1;
int temp = a; //temp指向的是变量1的一个副本
temp=2; //temp指向了变量2
System.out.println(a);
System.out.println(temp);
//引用类型赋值操作,进行的引用传递(变量名指向的就是同一个变量本身)
People people1=new People(10, "bill");
People people2=people1;
people1.setAge(20);
System.out.println(people1);
System.out.println(people2);
}
}
输出
1
2
People [age=20, name=bill]
People [age=20, name=bill]
方法参数的引用传递
package com.bill.test0.yy;
class People{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "People [age=" + age + ", name=" + name + "]";
}
}
public class Temp {
private static void method1(int a){
a=2;
}
private static void method2(People people){
people.setAge(20);
}
public static void main(String[] args) {
//基本类型赋值操作,进行的值传递(变量名指向的是变量的副本)
int a = 1;
method1(a); //传入的是a的副本
System.out.println(a);
//引用类型赋值操作,进行的引用传递(变量名指向的就是同一个变量本身)
People people=new People(10, "bill");
method2(people); //传入的是people这个对象本身
System.out.println(people);
}
}
输出
1
People [age=20, name=bill]
赋值操作没有传递性
1,基本类型的赋值操作
public class Test2 {
private static void method(int[] a) {
int temp=a[0]; //基本类型赋值:将a[0]元素的值复制给temp,temp和a[0],是指向了内存两个位置
temp=100; //将100赋值给temp,a[0]不受影响
System.out.println(temp);
}
public static void main(String[] args) {
int[] a = { 5, 3, 1, 2, 4 };
method(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
输出
100
5 3 1 2 4
2,引用类型的赋值操作
class People {
private int age;
private String name;
public People(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People [age=" + age + ", name=" + name + "]";
}
}
public class Test3 {
private static void change(People[] peoples) {
People temp = peoples[0]; // 引用类型赋值,temp和peoples[0]指向同一个对象
temp = new People(30, "lucy"); // temp指向新的对象,peoples[0]不改变
// temp.setAge(30); //想通过temp修改peoples[0]可以通过方法调用
}
public static void main(String[] args) {
People[] peoples = new People[2];
peoples[0] = new People(10, "bill");
peoples[1] = new People(20, "jack");
change(peoples);
for (int i = 0; i < peoples.length; i++) {
System.out.println(peoples[i]);
}
}
}
输出
People [age=10, name=bill]
People [age=20, name=jack]
Happy Learning !!