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

关于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日

相关文章

  • springboot springmvc抛出全局异常的解决方法

    下面是详细讲解“springboot springmvc抛出全局异常的解决方法”的完整攻略。 1. 场景描述 在开发Spring Boot和Spring MVC项目时,我们经常需要处理程序运行时的异常,这些异常可能会在控制器、服务或Spring Bean中发生。当运行时发生异常时,Spring Boot框架会抛出默认的异常界面,可能包含敏感信息,这不是我们想…

    Java 2023年5月27日
    00
  • Java 从json提取数组并转换为list的操作方法

    下面是 “Java 从json提取数组并转化为list的操作方法” 的完整攻略: 1. 需要的依赖 在 Java 中使用 JSON 数据,我们需要导入相应的 JSON 解析库,这里我们以 JSON-java 为例。 在 Maven 项目中添加以下依赖即可: <dependency> <groupId>org.json</grou…

    Java 2023年5月26日
    00
  • JAVA环境搭建之MyEclipse10+jdk1.8+tomcat8环境搭建详解

    JAVA环境搭建之MyEclipse10+jdk1.8+tomcat8环境搭建详解 本文将为初学者详细讲解如何在Windows操作系统上搭建MyEclipse10+jdk1.8+tomcat8环境,使得能够愉快地进行JAVA程序开发。 1. 准备工作 在进行环境搭建之前,需要确保系统中已经安装好了以下软件: JDK1.8及以上版本 Tomcat8及以上版本 …

    Java 2023年5月19日
    00
  • spring-transaction源码分析(1)概述和事务传播级别

    spring-tx概述 spring-tx包使用注解驱动和AOP通知将事务开启、提交/回滚、以及复杂的传播机制封装了起来,开发者不再需要编写事务管理的代码,而是可以只关注自己的业务逻辑。 本文将简单介绍spring-tx使用步骤以及七种事务传播级别。 后续文章会阅读源码,深入分析spring-tx aop通知、七种事务传播级别以及事务开启/提交/回滚的实现方…

    Java 2023年5月6日
    00
  • 详解如何使用java实现Open Addressing

    详解如何使用Java实现Open Addressing Open Addressing是一种哈希表的实现策略,它可以通过将元素插入到哈希表中直到找到一个为空的插槽。在此过程中,与元素对应的键的哈希值在哈希表中指定其插入的位置。Open Addressing的优点在于只需要一个数组来存储哈希表,而不需要使用链表。 本文将详细介绍如何使用Java实现Open A…

    Java 2023年5月26日
    00
  • java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    Java实现无符号数转换 在Java中,整数类型默认为带符号整数,即可以表示正数、负数和0。而有时候我们需要处理无符号整数,即只能表示非负整数。这时候可以使用Java中的位运算进行转换。 将有符号整数转换为无符号整数需要进行以下操作: 将有符号整数的二进制表示转换为补码表示。 将补码表示的二进制字符串左移一位,并将右侧补一个0,这样可以去掉一个符号位。 将左…

    Java 2023年5月27日
    00
  • Java毕业设计实战之在线网盘系统的实现

    Java毕业设计实战之在线网盘系统的实现攻略 1. 系统设计 1.1 需求分析 初步确定该在线网盘系统的需求如下: 用户可以在系统中上传、下载、删除和分享文件 文件可以以个人文件和共享文件两种形式存在 用户可以设定不同的权限管理,查看和编辑文件需要不同的权限 系统需要考虑安全性,防止恶意攻击和数据泄露 1.2 架构设计 根据需求分析,可以设计出系统的架构,其…

    Java 2023年5月24日
    00
  • Java读取数据库表

    Java读取数据库表 package com.easycrud.builder; import com.easycrud.utils.PropertiesUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.*; /** * @BelongsProjec…

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