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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/185472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-26 12:19
下一篇 2024-11-26 12:24

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论