锁定老帖子 主题:Java中的引用传递参数 为什么错误?
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-12
建议看看javaCore2,里面有将到java采用的是值传递的方式。
并且在方法中是无法进行值的改变的。 |
|
返回顶楼 | |
发表时间:2011-10-12
java中只有值传递,没有引用传递,每次传递参数,都有一个变量的复制过程,所以就出现了这个问题
|
|
返回顶楼 | |
发表时间:2011-10-12
最后修改:2011-10-12
你这玩意运行的时候就相当于
null=new ArrayList(); |
|
返回顶楼 | |
发表时间:2011-10-12
你这里传的是null,而非某个引用 。
|
|
返回顶楼 | |
发表时间:2011-10-12
NSCoffee 写道 请问下面的代码为什么会出现错误?
public static void main(String[] args) { List<String> a=null; test(a); System.out.println(a.size()); } public static void test(List<String> a) { a = new ArrayList<String>(); a.add("cc"); } luciferdevil 写道 public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("cc"); test(a); System.out.println(a.size());//3 } public static void test(List<String> a) { a.add("cc"); a.add("bb"); } 这样是可以滴 1) 主方法中的a和test方法中的a开辟了两块不同的栈内存,因此我们可以管主方法中的a叫做a(main),test方法中的a叫做a(test) 2) new出来的对象都放在堆中,通过变量a来调用它们,不管在test方法中有没有new对象,只要你在test方法中重新new一个对象,再通过其引用来赋值,都不会对主方法中的对象有影响~ |
|
返回顶楼 | |
发表时间:2011-10-12
最后修改:2011-10-12
NSCoffee 写道 请问下面的代码为什么会出现错误?
public static void main(String[] args) { List<String> a=null; test(a); System.out.println(a.size()); } public static void test(List<String> a) { a = new ArrayList<String>(); a.add("cc"); } luciferdevil 写道 public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("cc"); test(a); System.out.println(a.size());//3 } public static void test(List<String> a) { a.add("cc"); a.add("bb"); } 这样是可以滴 1) 主方法中的a和test方法中的a开辟了两块不同的栈内存,因此我们可以管主方法中的a叫做a(main),test方法中的a叫做a(test) 2) new出来的对象都放在堆中,通过变量a来调用它们,不管在test方法中有没有new对象,只要你在test方法中重新new一个对象,再通过其引用来赋值,都不会对主方法中的对象有影响~ |
|
返回顶楼 | |
发表时间:2011-10-12
程序新手 写道 NSCoffee 写道 请问下面的代码为什么会出现错误?
public static void main(String[] args) { List<String> a=null; test(a); System.out.println(a.size()); } public static void test(List<String> a) { a = new ArrayList<String>(); a.add("cc"); } luciferdevil 写道 public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("cc"); test(a); System.out.println(a.size());//3 } public static void test(List<String> a) { a.add("cc"); a.add("bb"); } 这样是可以滴 1) 主方法中的a和test方法中的a开辟了两块不同的栈内存,因此我们可以管主方法中的a叫做a(main),test方法中的a叫做a(test) 2) new出来的对象都放在堆中,通过变量a来调用它们,不管在test方法中有没有new对象,只要你在test方法中重新new一个对象,再通过其引用来赋值,都不会对主方法中的对象有影响~ |
|
返回顶楼 | |
发表时间:2011-10-12
最后修改:2011-10-12
程序新手 写道 程序新手 写道 NSCoffee 写道 请问下面的代码为什么会出现错误?
public static void main(String[] args) { List<String> a=null; test(a); System.out.println(a.size()); } public static void test(List<String> a) { a = new ArrayList<String>(); a.add("cc"); } luciferdevil 写道 public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("cc"); test(a); System.out.println(a.size());//3 } public static void test(List<String> a) { a.add("cc"); a.add("bb"); } 这样是可以滴 1) 主方法中的a和test方法中的a开辟了两块不同的栈内存,因此我们可以管主方法中的a叫做a(main),test方法中的a叫做a(test) 2) new出来的对象都放在堆中,通过引用a来调用它们,不管在test方法中有没有new对象,只要你在test方法中重新new一个对象,再通过其引用来赋值,都不会对主方法中的对象有影响~ |
|
返回顶楼 | |
发表时间:2011-10-12
你出过去的是一个空指针吗? 这样出现了空指针异常
|
|
返回顶楼 | |
发表时间:2011-10-12
NSCoffee 写道 请问下面的代码为什么会出现错误?
public static void main(String[] args) { List<String> a=null; test(a); System.out.println(a.size()); } public static void test(List<String> a) { a = new ArrayList<String>(); a.add("cc"); } 这个是引用传递 但是你要注意 main中的a和test中的a是两个不同的对象 在调用test的时候 是把main中的a和test中的a指向同一个对象 所以是他们是相同的 都为null 但是你在test中重新new了一个对象 并且赋值为a 这样的话 main中的a和test中的a将分别指向不同的对象 main中的a仍然为null 但test中的a不为Null 这样的话 你在System.out.println(a.size());的时候 其实是null.size 所以会报错 |
|
返回顶楼 | |