Java对象传递与返回的细节问题详析

yizhihongxing

关于Java对象的传递和返回,我们需要注意以下细节问题。

Java对象传递的细节问题

在Java中,我们可以将对象作为参数传递给方法,这种传递方式是引用传递。即方法得到的是对象的地址,我们通过地址来操作这个对象。在这个过程中,如果对象被修改了,那么原对象也会相应的被修改。

示例一:

public class Student {
    String name;
    int age;
}

public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student();
        stu1.name = "Tom";
        stu1.age = 18;
        System.out.println("调用前:name=" + stu1.name + ", age=" + stu1.age);
        modifyStudent(stu1);
        System.out.println("调用后:name=" + stu1.name + ", age=" + stu1.age);
    }

    public static void modifyStudent(Student stu) {
        System.out.println("修改前:name=" + stu.name + ", age=" + stu.age);
        stu.name = "Jerry";
        stu.age = 20;
        System.out.println("修改后:name=" + stu.name + ", age=" + stu.age);
    }
}

输出结果为:

调用前:name=Tom, age=18
修改前:name=Tom, age=18
修改后:name=Jerry, age=20
调用后:name=Jerry, age=20

从输出结果可以看出,在方法中更改了对象的属性,原对象也随之改变。

但是需要注意,在Java中无论如何都不能改变对象的地址。

示例二:

public class Test {
    public static void main(String[] args) {
        String str = "Hello";
        System.out.println("调用前:" + str);
        modifyString(str);
        System.out.println("调用后:" + str);
    }

    public static void modifyString(String str) {
        System.out.println("修改前:" + str);
        str = "World";
        System.out.println("修改后:" + str);
    }
}

输出结果为:

调用前:Hello
修改前:Hello
修改后:World
调用后:Hello

可以看出,在方法中修改了字符串,但是没有改变原来的字符串,而是返回了一个新的字符串。

Java对象返回的细节问题

在Java中,方法可以返回对象类型。同样,返回的也是对象的地址。需要注意的是,如果返回的是对象的引用,那么在外部操作这个对象时,同样会影响到这个对象的原始值。

示例三:

public class Test {
    public static void main(String[] args) {
        Student stu1 = getStudent();
        System.out.println("调用后:name=" + stu1.name + ", age=" + stu1.age);
    }

    public static Student getStudent() {
        Student stu = new Student();
        stu.name = "Tom";
        stu.age = 18;
        System.out.println("调用前:name=" + stu.name + ", age=" + stu.age);
        return stu;
    }
}

输出结果为:

调用前:name=Tom, age=18
调用后:name=Tom, age=18

在Example3中,getStudent方法返回了Student对象,而在main方法中,将返回值赋值给了stu1变量。从输出结果可以看出,stu1的值与getStudent方法返回的对象是同一个,因此修改stu1的值会影响原始对象。

示例四:

public class Test {
    public static void main(String[] args) {
        Student stu1 = getStudent();
        Student stu2 = getStudent();
        System.out.println("调用后:stu1 name=" + stu1.name + ", age=" + stu1.age);
        System.out.println("调用后:stu2 name=" + stu2.name + ", age=" + stu2.age);
    }

    public static Student getStudent() {
        Student stu = new Student();
        stu.name = "Tom";
        stu.age = 18;
        System.out.println("调用前:name=" + stu.name + ", age=" + stu.age);
        return stu;
    }
}

输出结果为:

调用前:name=Tom, age=18
调用前:name=Tom, age=18
调用后:stu1 name=Tom, age=18
调用后:stu2 name=Tom, age=18

可以看出,无论用getStudent方法返回多少个对象,这些对象在外部的操作是互不干扰的,每个对象是独立的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java对象传递与返回的细节问题详析 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 微信小程序开发实现首页弹框活动引导功能

    下面是“微信小程序开发实现首页弹框活动引导功能”的详细攻略: 步骤一:创建活动弹框组件 在项目中创建一个名为activity-modal的活动弹框组件。 在activity-modal组件的WXML文件中定义一个自定义弹框,并设置其显示和隐藏的属性: <view class="activity-modal" hidden=&quot…

    Java 2023年5月23日
    00
  • Java代码生成器的制作流程详解

    让我来详细讲解一下 Java 代码生成器的制作流程。 1. 确定生成器的目标和功能 Java 代码生成器的目标是为开发者提供快速便捷的自动化代码生成服务。开发者可以通过输入指定参数,自动生成与业务相关的代码,提高开发效率。 具体的功能可以根据业务需求制定,以下是一些常用的功能:- 自动生成 POJO 类- 自动生成 DAO 层代码- 自动生成 Service…

    Java 2023年5月30日
    00
  • 详解Spring如何整合Mybatis

    下面我会详细讲解如何整合Spring和MyBatis的攻略,包括必要的配置和示例。 一、添加依赖 首先需要在pom.xml中添加以下依赖: <!– Spring –> <dependency> <groupId>org.springframework</groupId> <artifactId>…

    Java 2023年5月19日
    00
  • js动态添加删除,后台取数据(示例代码)

    下面是JavaScript动态添加删除和后台取数据的完整攻略。 动态添加删除元素 在JavaScript中,动态添加和删除元素通常使用DOM操作实现。例如,可以使用以下步骤动态添加一个元素: 创建一个新的HTML元素,可以使用document.createElement方法创建,传入要创建的元素标签名称。 修改元素属性或内容,可以使用元素对象的属性或方法进行…

    Java 2023年6月16日
    00
  • 细致解读希尔排序算法与相关的Java代码实现

    细致解读希尔排序算法与相关的Java代码实现 算法介绍 希尔排序(Shell Sort)是插入排序的一种高效的改进算法,也称作缩小增量排序,通过设定一个增量序列来先进行一定量的插入排序,然后逐步减小增量,最后增量为1时再进行一次插入排序,从而达到排序的效果。 希尔排序的过程如下: 设定一个增量序列(如:{1,3,7,15,…}),对于序列进行遍历; 对于…

    Java 2023年5月26日
    00
  • JavaSpringBoot报错“HeuristicRollbackException”的原因和处理方法

    原因 “HeuristicRollbackException” 错误通常是以下原因引起的: 事务问题:如果您的事务存在问题,则可能会出现此错误。在这种情况下,需要检查您的事务并确保它们正确。 并发问题:如果您的应用程序存在并发问题,则可能会出现此错误。在这种情况下,您需要检查您的应用程序并确保它们正确。 数据库问题:如果您的数据库存在问题,则可能会出现此错误…

    Java 2023年5月4日
    00
  • 浅谈servlet3异步原理与实践

    浅谈servlet3异步原理与实践 什么是Servlet3异步 Servlet3.0规范中增加了异步处理的功能,使Servlet容器的性能可以进一步提升。Servlet3.0之前,servlet都是由线程来处理的,每次请求都需要创建一个线程,处理完请求后才会销毁这个线程。如果请求量很大,反复创建销毁线程的过程会给服务器造成很大负担。 而异步Servlet能够…

    Java 2023年5月20日
    00
  • java利用正则表达式处理特殊字符的方法实例

    当处理含有特殊字符的字符串时,我们通常会使用正则表达式来进行匹配和替换。而Java提供了了解处理特殊字符的方法,并且使用正则表达式来匹配和替换字符串。下面是详细的步骤: 1. 使用转义字符 当需要处理特殊字符(例如:. 、^、$、+、*、?、{、}、(、)、|、\、[、]等)时,需要借助转义字符来进行正则表达式的编写。 示例: String input = …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部