Java里没有指针看起来似乎是简单了,可是有的时候我到觉得摸不着头了。
没有&和*的明显标记,我如何得知java在何种情况下是采用何种传递参数方式呢?
具体来说,大家能帮我实现如下代码吗?1。参数为int的函数,函数内对参数变量修改,不影响函数外的调用者
2。参数为int的函数,函数内对参数变量修改,同时影响到函数外的调用者
3。参数为Integer的函数,函数内对参数变量修改,不影响函数外的调用者
4。参数为Integer的函数,函数内对参数变量修改,同时影响到函数外的调用者
没有&和*的明显标记,我如何得知java在何种情况下是采用何种传递参数方式呢?
具体来说,大家能帮我实现如下代码吗?1。参数为int的函数,函数内对参数变量修改,不影响函数外的调用者
2。参数为int的函数,函数内对参数变量修改,同时影响到函数外的调用者
3。参数为Integer的函数,函数内对参数变量修改,不影响函数外的调用者
4。参数为Integer的函数,函数内对参数变量修改,同时影响到函数外的调用者
传值(对象类型传的是对象地址值)1)
public void changeInt(int i)
{
i = 6; ....
}2)
public int changeInt(int i)
{
return i + 2;
}3),4) 一样.
private int i=5;
public void changeInt(int i)
{
i=10;
} public static void main(String[] args) {
changeInt(i);
System.out.println(i);
}
}
解释一下这段代码的错误
使用StringBuffer的成员函数造成的修改将会影响到函数外,比如append()
不使用成员函数而直接用=赋值,将不会影响到函数外3。java无法像其他语言那样实现类似这样的函数:void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}唉,还是有点儿乱
private int i=5;
public void changeInt(int i)
{
i=10;
} public static void main(String[] args) {
changeInt(i);//你这个不是static方法,因此应该通过对象来调用
System.out.println(i);//i的错误同上
}
}
private int i=5;
public void changeInt(int i)
{
int i=10;
System.out.println("first" + i);
} public static void main(String[] args) {
changeInt();
System.out.println("Second: "+i);
}
}
first: 10
Second : 5
如果参数是对象,则传递的是reference,即类似指针,因此,函数要改变实参的值
int i=5;
public void changeInt()
{
int i=10;
System.out.println("first" + i);
} public static void main(String[] args) {
changeInt();
System.out.println("Second: "+i);
}
}
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
public static void operate(StringBuffer x, StringBuffer y){
x.append(y);
y=x;
}
}
答案:AB,B
-------------------------------
如public void fun1(int i)//传的是 i的值
{
}
--------------------------------
Object oo = new Object();
fun2(oo);
public void fun2(Object obj)//传的是 obj(obj是一个对象的引用)的值
{
obj = new Object();//obj引用了另一个对象,但oo并没改变
}
{
int tmp = a;
a = b;
b = tmp;
}这个是可以实现的啊,冒泡法就是这么实现的
java中函数传递参数的方式都是 『传值』,这是最根本的。
对于基本型变量如int、float等来说,传递的是变量的内容,函数中的产生一个新的变量来接收参数的值,它们两个是两个内容一样的 『不同变量』 ,所以在函数中改变不会影响到原来的变量。
对于参数是对象来说,传递的是对象引用的一个副本,也就是说,函数中产生了一个引用变量,这个引用变量的值和作为参数传过来的那个变量的值是一样的,这两个不同的变量指向内存中同一个地址,即同一个对象。那么此时就有两种情况,假设a为函数中的接收参数的变量:
1.当执行如a=其他对象,a=new等赋值操作时,实际上是将a指向新的位置,那么函数外的原值不改变。
2.如果在函数中执行的是对a的成员变量的操作,或者调用对象中修改成员变量的函数,那么就改变了原值。