由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 在一个函数里把arraylist设为null 但是有问题
相关主题
Java练习题 5线程问题。
请帮忙看看这个编译错误Spring Library Bug?
VECTOR一问请教一个简单的问题
extending generic class , but not mentioning its parameterized type?简单问题
这段程序的输出是什么? 为什么interesting
我这个简单例子,怎么在actionListener里面拿到contentPane的instance?java reflecton question: how to represent a String[] class?
help on this scope question请教个garbage collector问题
help "java.lang.NoSuchMethodError"问个primitive type的问题
相关话题的讨论汇总
话题: null话题: arraylist话题: makenull话题: 函数话题: public
进入Java版参与讨论
1 (共1页)
s*******y
发帖数: 558
1
下面这个例子里面 makenull函数传入一个ArrayList的instance, 在函数里把它
设为null, 但是函数返回后, main函数里的这个instance并不为null.
这是为什么阿?
public class test {
public static void makenull(java.util.ArrayList s){
s = null;
}
public static void main(String[] args) {
java.util.ArrayList s = new java.util.ArrayList();
test.makenull(s);
// after test.makenull function, s is NOT null
}
}
o**v
发帖数: 1662
2
passed by value, always. 【 在 starrysky (冰糖葫芦_爱可不可以永远幸福没有悲伤) 的大作中提到: 】
xt
发帖数: 17532
3

伤) 的大作中提到: 】
别和通常意义上的pass by value混淆.其实pass by reference就是建立在pass by
value上的,
区别是pass by reference被pass 的是reference(pointer)的value而不是instance
value.
因此Java可以认为是pass by value,因为object在程序中是以reference来表示的.因此在
传递
reference的时候实际上是pass by value.
上面那段和下面的没有区别:
int n=10;
makeZero(n);
...
void makeZero( int n ) { n=0;}
caller方的n是不会变的,因为被改变的是n的一个copy.

【在 o**v 的大作中提到】
: passed by value, always. 【 在 starrysky (冰糖葫芦_爱可不可以永远幸福没有悲伤) 的大作中提到: 】
s*******y
发帖数: 558
4
thanks a lot
但是你们的解释还是没法说服我
我看到下面这样的解释 觉得比较明白叻
public class MyApp {
public static void makenull(java.util.ArrayList c) {
// c - is a new refference on object of ArrayList class
// value of c refference is same as in s
// so you have two reffeneces on same object
c=null; // here you make c (one of this refference) as null
}
public static void main(String[] args) {
java.util.ArrayList s = new java.util.ArrayList();
MyApp.makenull(s);
//s - is still reffere

【在 xt 的大作中提到】
:
: 伤) 的大作中提到: 】
: 别和通常意义上的pass by value混淆.其实pass by reference就是建立在pass by
: value上的,
: 区别是pass by reference被pass 的是reference(pointer)的value而不是instance
: value.
: 因此Java可以认为是pass by value,因为object在程序中是以reference来表示的.因此在
: 传递
: reference的时候实际上是pass by value.
: 上面那段和下面的没有区别:

o**v
发帖数: 1662
5
值传递呀,永远是【 在 starrysky (冰糖葫芦_爱可不可以永远幸福没有悲伤) 的大作中提到: 】
r*****l
发帖数: 2859
6
You can not make the ArrayList null in this example. While if you want to
just clear the ArrayList, this works:
public static void makeEmpty(java.util.ArrayList s) {
s.clear();
}
BTW: makenull is not a good name, make it makeNull, using the java
convention.

【在 s*******y 的大作中提到】
: 下面这个例子里面 makenull函数传入一个ArrayList的instance, 在函数里把它
: 设为null, 但是函数返回后, main函数里的这个instance并不为null.
: 这是为什么阿?
: public class test {
: public static void makenull(java.util.ArrayList s){
: s = null;
: }
: public static void main(String[] args) {
: java.util.ArrayList s = new java.util.ArrayList();
: test.makenull(s);

1 (共1页)
进入Java版参与讨论
相关主题
问个primitive type的问题这段程序的输出是什么? 为什么
大虾们能帮我看看这个程序问题出在哪么?我这个简单例子,怎么在actionListener里面拿到contentPane的instance?
求教一个Java问题 IllegalMonitorStateExceptionhelp on this scope question
问个autoboxing的问题help "java.lang.NoSuchMethodError"
Java练习题 5线程问题。
请帮忙看看这个编译错误Spring Library Bug?
VECTOR一问请教一个简单的问题
extending generic class , but not mentioning its parameterized type?简单问题
相关话题的讨论汇总
话题: null话题: arraylist话题: makenull话题: 函数话题: public