1.Java总是按值调用( 即方法得到的总是参数值的拷贝(副本) )
2.Java数据类型
3.说明:
(1)基本数据类型的副本更改不影响原值
public static void main(String []args)
{
int value1=10;
int value2=20;
System.out.println("Before swap value1: "+value1+" value2: "+value2);//
swap(value1, value2);
System.out.println("After swap value1: "+value1+" value2: "+value2);
}
public static void swap(int value1,int value2)
{
int temp=value1;
value1=value2;
value2=temp;
}
//输出
//Before swap value1: 10 value2: 20
//After swap value1: 10 value2: 20
(2)引用数据类型的副本更改不影响原引用
class Student
{
int No;
String name;
public Student(int No,String name)
{
this.No=No;
this.name=name;
}
public String toString()
{
return "Student [No=" + No + ", name=" + name + "]";
}
}
public static void main(String []args)
{
Student s1=new Student(10,"Alice");
Student s2=new Student(20,"Tom");
System.out.println("Before swap s1: "+s1+" s2: "+s2);
swap(s1, s2);
System.out.println("After swap s1: "+s1+" s2: "+s2);
}
public static void swap(Student s1,Student s2)
{
Student temp=s1;
s1=s2;
s2=temp;
}
//输出
//Before swap s1: Student [No=10, name=Alice] s2: Student [No=20, name=Tom]
//After swap s1: Student [No=10, name=Alice] s2: Student [No=20, name=Tom]
(3)通过副本引用对该对象进行了更改,那么会影响到原引用。(因为副本引用和原引用指向同一对象)
public static void main(String []args)
{
Student s1=new Student(10,"Alice");
Student s2=new Student(20,"Tom");
System.out.println("Before ChangeNo s1: "+s1);
ChangeNo(s1);
System.out.println("After ChangeNo s1: "+s1);
System.out.println("Before ChangeNo s2: "+s2);
ChangeNo(s2);
System.out.println("After ChangeNo s2: "+s2);
}
public static void ChangeNo(Student s)
{
s.No=s.No+1;
}
//输出
// Before ChangeNo s1: Student [No=10, name=Alice]
// After ChangeNo s1: Student [No=11, name=Alice]
// Before ChangeNo s2: Student [No=20, name=Tom]
// After ChangeNo s2: Student [No=21, name=Tom]