请问在java中,用类作为函数参数时,这个类是类的本身还是格外的镜像?
就是说,在一个函数的参数中使用了某个类,然后在函数中对类中元素进行更改,
那么类中的元素就被修改了,如下面的例子。
这个是函数处于的类;
public class nstest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
nstest t=new nstest();
ns t1=new ns();
t.change(t1);
System.out.println(t1.content);
}
public boolean change(ns t)
{
t.content="false";
return true;
}}
----------------------------------------------------------------
这个是被操作的类:
public class ns {
public String content="ok";
}
-----------------------------------------------------------------------------
执行的结果是:
false
---------------------------------------------------------------------
我们原来不是说形参和实参的区别么?
int i=0;
add(i);
printf("%d",i);void add(i)
{
i++;
}
执行结果不还是0么?请各位大侠不吝赐教
就是说,在一个函数的参数中使用了某个类,然后在函数中对类中元素进行更改,
那么类中的元素就被修改了,如下面的例子。
这个是函数处于的类;
public class nstest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
nstest t=new nstest();
ns t1=new ns();
t.change(t1);
System.out.println(t1.content);
}
public boolean change(ns t)
{
t.content="false";
return true;
}}
----------------------------------------------------------------
这个是被操作的类:
public class ns {
public String content="ok";
}
-----------------------------------------------------------------------------
执行的结果是:
false
---------------------------------------------------------------------
我们原来不是说形参和实参的区别么?
int i=0;
add(i);
printf("%d",i);void add(i)
{
i++;
}
执行结果不还是0么?请各位大侠不吝赐教
解决方案 »
- 新手求助关于用Socket制作聊天室的问题
- 对象池怎么实现?
- 谁可以发个JDK给我啊
- java怎么返回多个值类型的参数?
- 如果我能够完全掌握《Thinking in Java》这本书,我每月可以拿到多少钱??
- 请问:这样的情况这么解决
- 有没有这样的方法?(急!急!!急!!!)
- 关于ToolTip:我要在自己的视图上,当鼠标移到某个位置的时候,显示一个tooltip,怎么做?
- 我有很多以前发的帖子,没有人回答,我想把它们删除,如何操作?
- <<Enterprise JAVA BEANS>>不适合初学者
- 用Java实现对Google数据的提取和重新包装?
- 使用Hashtable的put方法,出现type safety的warning
也就是说,它知道对象的位置,所以你改变这个地址的内容,这个地址的内容就会发生改变。
但是如果你是将这个地址(参数对象的地址复本)指向其他对象,参数对象的地址不会发生改变。
基于此,很多专家都认为java全部都是值传递,不存在形参的说法。但是为了便于理解,往往把对象参数视为形参,因为从表象上看,它和形参的行为极为相似,如果对参数对象的member进行操作,毕竟该对象的member会发生改变。
{
t=new ns(); //引用的复本改变。
t.content="true";
return true;
}
//输出为"OK"。
package test;public class Nstest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Nstest t=new Nstest();
Ns t1=new Ns();
Ns t2 = new Ns();
t.change(t1);
System.out.println(t1.content);
System.out.println(t2.content);
}
public boolean change(Ns t)
{
t.content="false";
return true;
} }
// ----------------------------------------------------------------
// 这个是被操作的类:
class Ns {
public String content="ok";
}你就会看到输出结果为:
false
ok
你就明白了t.change(t1);只是改变了实例(instance)中的值,并没有改变类中的值.
各位都说实例的问题,但是实例不也有成员么?如变量和函数。
那多个实例之间的成员还有什么关系么?
当然,这里不设计static的问题。
的是地址,可以通过反引用去调用该类的方法
基本变量 是传值
java中,类的调用,是指针地址的调用。这样就可以对类进行各种操作,类中的成员也可以被更改。但是若是传入变量型类型,则传入的是一个副本,对其做的更改不回反弹会原变量。
int add(int i) {
i++;
return i;
}
}
class Main{
public static void main(String arg[]){
Test t=new Test();
System.out.println(t.add(0));
}
}结果为1
add(i);不可以用型参传值,要用实参
printf("%d",i);输出的结果是上面 int i=0的值,根本没有调用add方法void add(i)
{
i++;
}
空的返回值类型,怎么把值传回去?除非你把输出放在里面而不是上面
void add(int i){
i++;
System.out.print(i);
}
{
Atest at=new Atest();
Test te=new Test();
Test te2=new Test();
at.st(te);
System.out.println(te.content);
System.out.println(te2.content);
te2.content=te.content;
System.out.println(te.content);
System.out.println(te2.content);
}
public /*boolean*/void st(Test t)
{
//t=new Test();
System.out.println(t.content);
t.content="false";
//return true;
}
}class Test{ static String content="aaa";}