public class Pass
{
public void amend(int x)
{
x=x*2;
}
public static void main(String[] args)
{
int i=10;
Pass p=new Pass();
p.amend(i);
System.out.println(i);
}
}输出的结果为什么是10而不是20呢?
而下面这个为什么能输出list 大小为2呢?请高手指点一下,谢了。public class Pass
{ public void addList(List<String> list)
{
list.add("first");
list.add("second");
}
public static void main(String[] args)
{
Pass p=new Pass();
List<String> list=new ArrayList<String>();
p.addList(list);
System.out.println(list.size());
}
}
第一个x 与 i不是同一个变量
第二个 list与main里的list虽然也不是同一个引用,但是指向同一个对象,对对象本身的操作会相互影响
Pass p=new Pass();
p.amend(i);
System.out.println(i);
打印的还是打印 i 的值
1:基本类型,传递这个基本类型的副本,不会改变被传递参数的值
2:对象类型,传递这个对象的值,因为java没有指针,所以仅仅可以改变参数的内部状态,不可以改变它的重新指向,
也就是说通过参数传递做重新赋值是无效的,LZ的例子是在list里添加一个元素是改变list的状态,所以大小是2了
{
public void amend(int x)
{
x=x*2;
}
public static void main(String[] args)
{
int i=10;
Pass p=new Pass();
p.amend(i);
System.out.println(i);
}
}int i=10; ------内存中 i=10;
p.amend(i); -----------内存中增加 x=10 执行 x=x*2 后 x=20; 并且x是局部变量 System.out.println(i); ------------ i=10public class Pass
{ public void addList(List<String> list)
{
list.add("first");
list.add("second");
}
public static void main(String[] args)
{
Pass p=new Pass();
List<String> list=new ArrayList<String>();
p.addList(list);
System.out.println(list.size());
}
}p.addList(list);
list传递的是一个(栈中)地址,其指向(堆)一块内存
1、原始数据类型(primitive type)作为参数传递
根据资料显示,Java中原始数据类型传递时是传值。实验一下,代码如下:
public class ParameterPassingAsPrimitiveType
{
public static void main(String args[])
{
int intType = 13;
System.out.println("修改原始类型参数值前:intType = " + intType);
changeValue(intType);
System.out.println("修改原始类型参数值后:intType = " + intType);
}
public static void changeValue(int intType)
{
intType = 14;
}
}
输出结果:
修改原始类型参数值前:intType = 13
修改原始类型参数值后:intType = 13
由此可以看出,传入的值是原始值(intType)的一个副本,在函数中修改了参数不会影响到原始值。
2、对象作为参数传递
先看代码:
public class ParameterPassingAsObject
{
public static void main(String args[])
{
StringBuffer aObject = new StringBuffer("Good");
System.out.println("修改对象前aObject = " + aObject);
changValue(aObject);
System.out.println("修改对象后aObject = " + aObject);
}
public static void changValue(StringBuffer bObject)
{
bObject.append(" affternoon");
}
}
运行结果如下:
修改对象前aObject = Good
修改对象后aObject = Good affternoon
看输出,对象被修改了,可以被理解为传址(传引用)了?是否真是这样呢?看一下下面的代码再说:
public class ParameterPassingAsObjectOther
{
public static void main(String args[])
{
StringBuffer aObject = new StringBuffer("Good");
System.out.println("修改对象之前aObject = " + aObject);
changeValue(aObject);
System.out.println("修改对象之后aObject = " + aObject);
}
public static void changeValue(StringBuffer bObject)
{
bObject = new StringBuffer("new");
bObject.append(" world");
}
}
本段代码的运行结果:
修改对象之前aObject = Good
修改对象之后aObject = Good
这个List<String>是个引用变量吗 也没看到类啊
可能我才疏学浅吧