书上说的乱糟糟的,一会按值传,一会按引用传,最后不知道按啥传了。
下面试验了一下交换变量,但是没效果啊,还是输出1和2,变量没换成import javax.swing.*;
import java.util.*;
import java.math.*;
import java.util.Date;
//package java.util.*;public class CloneTest
{
public static void main(String[] args)
{
Employee e1 = new Employee();
Employee e2 = new Employee();
e1.age = 1;
e2.age = 2;
SWAP.swap(e1, e2);
System.out.println(e1.age);
System.out.println(e2.age);
}
}
class SWAP
{
public static void swap(Employee a1, Employee a2)
{
Employee tmp;
tmp = a1;
a1 = a2;
a2 = tmp;
}
}
class Employee
{
public int age;
public Employee()
{
// System.out.println("Employee::Employee()");
}
public static void main(String[]args)
{
// System.out.println("Employee::main");
}
}
下面试验了一下交换变量,但是没效果啊,还是输出1和2,变量没换成import javax.swing.*;
import java.util.*;
import java.math.*;
import java.util.Date;
//package java.util.*;public class CloneTest
{
public static void main(String[] args)
{
Employee e1 = new Employee();
Employee e2 = new Employee();
e1.age = 1;
e2.age = 2;
SWAP.swap(e1, e2);
System.out.println(e1.age);
System.out.println(e2.age);
}
}
class SWAP
{
public static void swap(Employee a1, Employee a2)
{
Employee tmp;
tmp = a1;
a1 = a2;
a2 = tmp;
}
}
class Employee
{
public int age;
public Employee()
{
// System.out.println("Employee::Employee()");
}
public static void main(String[]args)
{
// System.out.println("Employee::main");
}
}
像数组,类这样的传值是按引用传递,传递的是地址
以上纯属个人观点,坐等大侠指正
以上纯属个人观点,坐等大侠指正
*@Description:
*@author:zhangjp
*@Parameter:
*@time:2012 Jul 30, 2012 8:47:12 AM
*/
public static void main(String[] args) {
int n = 20;
User u = new User(18,"zhangsan");
System.out.println(u);
change(u, n);
System.out.println(u);
System.out.println(n);
}
public static void change(User u,int i){
i = 25;
u.setId(25);
}}package test;public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "u.id="+id+" "+"u.name="+" "+name;
}
}
输出:
u.id=18 u.name= zhangsan
u.id=25 u.name= zhangsan
20int的值没有改变还是20
而user的id改变了,说明了什么? 说明 change(User u,int i)的定义int的传的是值,而User传的是引用。关键在于int存在java的栈里,user对象的存储在java堆里面,实际传输的是user的引用。所以int没改变了,而user的id改变了。不知明白了没
个人博客 http://www.happyalaric.com
楼主记住两点:
1 对象传引用(引用即指针)
2 原始类型传值
你的例子里就是传的引用,所以你可以交换对象里的值,即age,但是你不能交换引用本身,因为引用本身就是作为值传进去的,这就是我们常说的java有且只有一种参数传递机制,这就是传值