您的位置:

java传引用,java中引用传递

本文目录一览:

java在函数调用时怎么“传int的引用”

[java] view plaincopy

public class TestFun {

public static void testInt(int i){

i=5;

}

public static void main(String[] args) {

int a=0 ;

TestFun.testInt(a);

System.out.println("a="+a);

}

}

程序执行结果:a=0 。

(二)对象类型参数:传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。

举两个例子:

(1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。

[java] view plaincopy

public class TestFun2 {

public static void testStr(String str){

str="hello";//型参指向字符串 “hello”

}

public static void main(String[] args) {

String s="1" ;

TestFun2.testStr(s);

System.out.println("s="+s); //实参s引用没变,值也不变

}

}

执行结果打印:s=1

(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。

[java] view plaincopy

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class Test {

public void a(Map a,String b)

{

a.put("test", b);

}

public void b()

{

Map a = new HashMap();

a.put("test", "a");

String b = "b";

//printMap(a);

a(a,b);

printMap(a);

}

public void printMap(Map a)

{

Set set = a.entrySet();

Iterator it = set.iterator();

while(it.hasNext())

{

Map.Entry e = (Map.Entry)it.next();

System.out.println("Key:"+e.getKey()+" Value:"+e.getValue());

}

}

public static void main(String avgs[])

{

Test t = new Test();

t.b();

}

}

执行结果,打印:Key:test Value:b 。可见在方法a()内改变了实参的内容。

(3)第二个例子是拿map举例的,还有经常涉及的是 StringBuffer :

[java] view plaincopy

public class TestFun4 {

public static void testStringBuffer(StringBuffer sb){

sb.append("java");//改变了实参的内容

}

public static void main(String[] args) {

StringBuffer sb= new StringBuffer("my ");

new TestFun4().testStringBuffer(sb);

System.out.println("sb="+sb.toString());//内容变化了

}

}

执行结果,打印:sb=my java 。

所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。

总结:

第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。

第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。

第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

java引用传递怎么用

String类型的传递是引用传递。也即是地址传递。传的是str的地址。把str里“good”的地址传给change()方法里的str。change()里的str赋予新的地址。是“testok”的地址。此时ex.str对“good”的引用没变。就是还是存放“good”的地址。所以。ex.str还是“good”基本数据类型传递的是值。但是数组类型是引用类型。传的也是ch的中{‘a’,‘b’,‘c’}的地址。ch[0]修改为‘g’。基本数据类型的修改改的是其值。所以change()中ch接受传来的ex.ch的地址,指向{‘a’,‘b’,‘c’},修改其中的ch[0]后。修改保持。ex.ch引用不变。变为{‘g’,‘b’,‘c’}要想修改它们的值,change()传的是Exampleechange(Examplee){e.str=“testok”;e.ch[0]='g';}

java中继承的数值传递引用

这个题目如下思路与实现

思路:

依照圆和圆柱的描述抽象成Java程序里的对象Cylinder与Circle,这也是Java的特点之一

圆与圆柱的关系:圆柱继承圆

写测试类TestCylinder

实现:

1.圆:

class Circle {

private double radius;// 半径

// 构造方法半径设为1

public Circle() {

super();

this.radius = 1.0;

}

// 设置半径

public void setRadius(Double radius) {

this.radius = radius;

}

// 得到半径

public Double getRadius() {

return radius;

}

}

2.圆柱

class Cylinder extends Circle {

private double length;

public Cylinder() {

super();

this.length = 1.0;

}

public void setLength(double length) {

this.length = length;

}

public double getLength() {

return length;

}

public double findVolume() {

return this.length * super.getRadius() * super.getRadius() * Math.PI;

}

}

3.测试

public class TestCylinder {

public static void main(String[] args) {

Cylinder cy = new Cylinder();//实例化一个圆柱

System.out.println(cy.findVolume());//因为length有默认值1,圆柱的父类圆具有半径且初始值是1,此处,没有主动给length和radius赋值,所以findVolume里使用的半径与高都是1,所以体积是3.141592653589793

cy.setRadius(2.0);

cy.setLength(2.0);

System.out.println(cy.findVolume());//主动给半径和高设置值,那么cy的半径与高的初始值就会被改变,结果就是2*2*2*PI

}

}

运行结果:

3.141592653589793

25.132741228718345