问几个最基本的问题

mytiger 2001-12-08 10:33:09
Test1:

public class TestArray
{

public TestArray()
{
}
public void testA(float[] a)
{
float[] b=new float[a.length];
for(int i=0;i<b.length;i++)
b[i]=i*i;

a=b;

System.out.println("first "+b[1]) ;
System.out.println("second "+a[1]) ;
}
public static void main(String[] args)
{
float[] a={1.1f,2.2f,3.3f};
TestArray object=new TestArray();
object.testA(a);
System.out.println("third"+a[1]);
}

}
结果是
first 1.0
second 1.0
third 2.2


Test2

public class TestArray
{
public TestArray()
{
}
public void testA(float[] a)
{
float[] b=new float[a.length];
for(int i=0;i<b.length;i++)
b[i]=i*i;
for(int i=0;i<b.length;i++)
a[i]=b[i];

System.out.println("first "+b[1]) ;
System.out.println("second "+a[1]) ;
}
public static void main(String[] args)
{
float[] a={1.1f,2.2f,3.3f};
TestArray object=new TestArray();
object.testA(a);
System.out.println("third "+a[1]);
}

}
结果是
first 1.0
second 1.0
third 1.0

Test3
public class TestArray
{
public TestArray()
{
}
public void testA(float[] a)
{
float[] b=new float[a.length];
for(int i=0;i<b.length;i++)
b[i]=i*i;
for(int i=0;i<b.length;i++)
a[i]=b[i];

System.out.println("first "+b[1]) ;
System.out.println("second "+a[1]) ;
}
public static void main(String[] args)
{
float[][] x=new float[3][10];
System.out.println("third "+x[0][1]);
TestArray object=new TestArray();
object.testA(x[0]);
System.out.println("third "+x[0][1]);
}

}
结果是
third 0.0
first 1.0
second 1.0
fourth 1.0

Test4
public class TestArray
{
public TestArray()
{
}
public float[] testA(float[] a)
{
return a;
}
public static void main(String[] args)
{
float[] x={1.1f,2.2f,3.3f};
float[] y=new float[3];
TestArray test=new TestArray();
y=test.testA(x);
System.out.println(y[1]);

}

}
结果是
2.2

Test5
public class TestArray
{
public TestArray()
{
}
public void testA(Integer a)
{
Integer b=new Integer(10);
a=b;

System.out.println("first "+b) ;
System.out.println("second "+a) ;
}
public static void main(String[] args)
{
Integer a=new Integer(1);
TestArray object=new TestArray();
object.testA(a);
System.out.println("third "+a);
}

}
结果是
first 10
second 10
third 1

我觉得test1不好理解。好象和下面的比如test4矛盾呀。它究竟传递了什么东西过去?
那位帮忙讲一下java的机理,我对c++的指针太习惯了,对java就很不习惯呵呵。
...全文
79 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
elva 2001-12-10
  • 打赏
  • 举报
回复
在test8中,a是全局变量啊!在Test1中,a=b什么都没有改变。
ggyy 2001-12-10
  • 打赏
  • 举报
回复
test1中,虽然有a=b,但是并不会回传给实参!因为a=b其实是要改变引用,但是不会回传!
aprim 2001-12-09
  • 打赏
  • 举报
回复
上面几位说的基本都对附与code说明:


//不是用b这个局部变量

public class TestArray {

public TestArray() {
}

public void testA(float[] a)
{
float[] b=new float[a.length];
for(int i=0;i<b.length;i++)
a[i]=i*i;

//a=b;

System.out.println("2------->"+b) ;
System.out.println("3------->"+"adress:"+a+" value:"+a[1]) ;
}
public static void main(String[] args)
{
float[] a={1.1f,2.2f,3.3f};
TestArray object=new TestArray();
System.out.println("1------->"+"adress:"+a+" value:"+a[1]) ;
object.testA(a);
System.out.println("1------->"+"adress:"+a+" value:"+a[1]) ;
}

}

//在用b这一局部变量 a=b时

public class TestArray {

public TestArray() {
}

public void testA(float[] a)
{
float[] b=new float[a.length];
for(int i=0;i<b.length;i++)
b[i]=i*i;

a=b;

System.out.println("2------->"+b) ;
System.out.println("3------->"+"adress:"+a+" value:"+a[1]) ;
}
public static void main(String[] args)
{
float[] a={1.1f,2.2f,3.3f};
TestArray object=new TestArray();
System.out.println("1------->"+"adress:"+a+" value:"+a[1]) ;
object.testA(a);
System.out.println("1------->"+"adress:"+a+" value:"+a[1]) ;
}

}
mytiger 2001-12-09
  • 打赏
  • 举报
回复
Test8
public class TestArray
{
TestArray()
{
}
float[] a={1.1f,2.2f,3.3f};

public void abc()
{
float[] b={0,0,0,0};
a=b;

}

public float[] getA()
{
return a;
}
public static void main(String[] args)
{
TestArray aa=new TestArray();
float[] b;
aa.abc();
b=aa.getA();
System.out.println(b[1]);
}
}
结果是0.0。

我现在发现test1难理解。别的还行。对象应该是一个reference,但test1究竟怎么理解?a=b这句话改变了什么?elva(花语) 请注意这个a是由原来的a传递过来的。当然,这里叫什么名字是无所谓的。
高手看看。
Go_Rush 2001-12-09
  • 打赏
  • 举报
回复
旁听
elva 2001-12-09
  • 打赏
  • 举报
回复
因为在Java中有两类变量,基本类型,如:int ,boolean,string一类,第二类就是对象和数组。在Java中,只能按值传递基本类型,即是传递该变量的一份拷贝,不会改变变量的值。同样,Java总是引用传递非基本类型,当按引用调用方法时,该方法对变量所作的任何改变都是永久性的。而在Test1中之所以a没有改变,只是因为a=b这条语句并不改变下面的a的值。但是并不是因为楼上的说的b是局部变量喔,而是因为此处的a与下面的a并不匹配,此处的a的长度可是不定的喔!
linshao16 2001-12-09
  • 打赏
  • 举报
回复
我觉得因为b是一个局部的变量,所以在test1中a=b的赋值是无效的(对于外部而言),因此,回到main时a不回改变
ggyy 2001-12-08
  • 打赏
  • 举报
回复
我觉得是传递了引用
test1好像是说不能改变作为引用所指的东西
cngavin 2001-12-08
  • 打赏
  • 举报
回复
there's no pointer in java, it's just a reference.
I known what your question is, but I don't know the answer clearly.

In test1, within the testA method, a will reference to b, but when the method call was end, b no longer exit, so where should a reference?

I don't know, someone else?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧