package
com.jasonhuang.test;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/** */ /**
* 测试Java中是传值还是传引用
*
* @author Jason Huang
*/
public class TestRef ... {
/** *//**
* Log4j日志
*/
private static Logger logger = Logger.getLogger(TestNIO.class);
/** *//**
* @param args
*/
public static void main(String[] args) ...{
// 设置日志记录级别为INFO
logger.setLevel(Level.INFO);
// 初始化实例v1
ValueObject v1 = new ValueObject(1, "Test 1");
logger.info("v1 before: " + v1);
// 方法调用v1的自身方法对v1更改内部变量
changeValue1(v1);
// 可证明,v1确实在方法中被改变了。
logger.info("v1 after: " + v1);
// 初始化实例v2
ValueObject v2 = new ValueObject(2, "Test 2");
logger.info("v2 before: " + v2);
// 方法对v2重新赋值
changeValue2(v2);
// 可证明,方法没有改变v2的原始值。
logger.info("v2 after: " + v2);
}
/** *//**
* 使用vo自身的函数对其内部数据进行改变是有效的,函数外可反映出来。这种object称为可变的(mutable)。
*
* @param vo
*/
private static void changeValue1(ValueObject vo) ...{
vo.setName("Test A");
logger.info("c1: " + vo);
}
/** *//**
* 在函数内给vo重新赋值不会改变函数外的原始值。
*
* @param vo
*/
private static void changeValue2(ValueObject vo) ...{
vo = new ValueObject(2, "Test B");
logger.info("c2: " + vo);
}
}
/** */ /**
* 实体类
*/
class ValueObject ... {
int id = 0;
String name = null;
public ValueObject(int id, String name) ...{
this.id = id;
this.name = 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;
}
@Override
public String toString() ...{
return super.toString() + String.format(", id: %d, name: %s", id, name);
}
}
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/** */ /**
* 测试Java中是传值还是传引用
*
* @author Jason Huang
*/
public class TestRef ... {
/** *//**
* Log4j日志
*/
private static Logger logger = Logger.getLogger(TestNIO.class);
/** *//**
* @param args
*/
public static void main(String[] args) ...{
// 设置日志记录级别为INFO
logger.setLevel(Level.INFO);
// 初始化实例v1
ValueObject v1 = new ValueObject(1, "Test 1");
logger.info("v1 before: " + v1);
// 方法调用v1的自身方法对v1更改内部变量
changeValue1(v1);
// 可证明,v1确实在方法中被改变了。
logger.info("v1 after: " + v1);
// 初始化实例v2
ValueObject v2 = new ValueObject(2, "Test 2");
logger.info("v2 before: " + v2);
// 方法对v2重新赋值
changeValue2(v2);
// 可证明,方法没有改变v2的原始值。
logger.info("v2 after: " + v2);
}
/** *//**
* 使用vo自身的函数对其内部数据进行改变是有效的,函数外可反映出来。这种object称为可变的(mutable)。
*
* @param vo
*/
private static void changeValue1(ValueObject vo) ...{
vo.setName("Test A");
logger.info("c1: " + vo);
}
/** *//**
* 在函数内给vo重新赋值不会改变函数外的原始值。
*
* @param vo
*/
private static void changeValue2(ValueObject vo) ...{
vo = new ValueObject(2, "Test B");
logger.info("c2: " + vo);
}
}
/** */ /**
* 实体类
*/
class ValueObject ... {
int id = 0;
String name = null;
public ValueObject(int id, String name) ...{
this.id = id;
this.name = 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;
}
@Override
public String toString() ...{
return super.toString() + String.format(", id: %d, name: %s", id, name);
}
}