`
lanceverw
  • 浏览: 44627 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java方法参数需要注意的小细节

阅读更多

以下内容翻译自Core Java VIII volume I Chapter 4 Objects and Classes, 仅作为个人学习笔记参考和交流。

 

Java中方法的参数总是使用“按值传递(Call by Value)”,这意味着方法总是获取参数的一份拷贝。

Java中存在两种方法参数:"基本数据类型(Primitive types)"和"对象引用(Object references)"

 

>> 先来看基本数据类型的情况:

 

例1:

public static void tripleValue(double x){
    x = 3 * x;
}

//方法调用:

double percent = 10;

tripleValue(percent);

 

分析:

 1. x 被初始化为percent的一份拷贝,值为10;

 2. 当调用tripleValue()方法的时候,x的值变为30,percent的值仍旧为10;

 3. 方法结束,参数x不再使用,所以方法结束后percent的值并未发生改变,即percent =  10。

 

>>再来看参数为对象引用(Object references)的情况:

 

例2:

public static void tripleSalary(Employee x){
   x.raiseSalary(200);
}

//方法调用:
Employee harry =  new  Employee(...);
tripleSalary(harry);

//查看harry的Salary
System.out.print(harry.getSalary());

分析:

1. 参数x被初始化为harry的拷贝,即对象引用的拷贝(注意不是Employee对象的拷贝,而是对象引用的拷贝)。 

2.raiseSalary()方法调用后,被x和harry同时引用的对象的Salary值被改变;

3.方法结束后,参数x不再使用,harry继续引用Employee实例对象,对象中的值被永久改变。

 

再来看一个例子,此例子说明了Java不是按引用传递,而总是按值传递

public static void swap(Emplyee x, Employee y){
    Employee temp = x;
    x = y;
    y = temp;
}

//方法调用:
Employee a = new Employee("Alice",...);
Employee b = new Employee("Bob",...);
swap(a, b);

 

问:现在a引用的是Bob,b引用的是Alice吗?

如果你的答案是否,那么你就理解了Java中方法参数的传递方式了。

 

小结:

 Java中:

 1. 一个方法不能改变一个基本数据类型(的值)。

 2. 一个方法可以改变一个对象参数的状态。

 3.一个方法不能使一个对象参数引用一个新的对象。

0
0
分享到:
评论

相关推荐

    JAVA反射参数传递概略

    这篇博客文章“JAVA反射参数传递概略”将深入探讨如何使用反射来处理方法参数,尤其是涉及到参数传递的细节。 首先,让我们理解什么是参数传递。在Java中,有两种基本的参数传递方式:值传递和引用传递。值传递是将...

    java虚拟机参数配置

    本文将围绕"java虚拟机参数配置"这一主题展开讨论,重点解析Heap Space与PermGen Space的配置细节。 ### Heap Space Heap Space是Java堆内存的一部分,用于存储对象实例。当Java程序启动时,JVM会为每个进程分配一...

    JAVA开发规范,开发注意事项

    以上只是Java开发规范和注意事项的一部分,实际开发中还需要考虑更多的细节,如代码审查、日志记录、并发编程等。通过遵循这些规范,可以提升代码质量,降低维护成本,使得Java项目更加健壮和可持续。

    Java调用存储过程--传入集合参数

    通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...

    java 编程规范需注意的内容

    ### Java编程规范需注意的内容 Java作为一种广泛使用的编程语言,在软件开发过程中,遵循一定的编程规范不仅有助于提高代码的可读性和可维护性,还能增强团队协作效率。以下是从标题、描述及部分内容中提取的关键...

    Java性能优化的45个细节

    Java性能优化是提升系统效率的关键环节,涉及到代码编写、内存管理、并发处理等多个方面。以下是对"Java性能优化的45...以上45个细节覆盖了Java性能优化的主要方面,实践中需要结合具体应用灵活运用,以达到最佳效果。

    java 虚拟机参数配置说明及Myeclipse内存不足

    但需要注意,过大的内存分配可能导致系统资源浪费,因此需要根据实际负载情况进行精细化调整。 总之,理解并熟练运用Java虚拟机的参数配置是每个Java开发者必备的技能,特别是在处理大型应用或复杂开发环境时。通过...

    编写跨平台Java程序注意事项

    Java 编写跨平台应用程序时,需要注意多个方面以确保程序能够在不同的操作系统上正确运行。首先,选择使用标准的 Java Development Kit (JDK) 版本,例如 1.0、1.1、1.2 或更高版本,并且依赖于 Java 核心 API,避免...

    java调用.net的webservice传字符串参数

    注意,CXF提供了更广泛的支持,可能需要更多的依赖库。 3. **生成客户端代理**: 使用XFire的代码生成器(如XFire的wsimport工具)来解析.NET Web服务的WSDL,并生成相应的Java客户端代码。 4. **调用Web服务**: ...

    Java调用带参数的存储过程并返回集合

    注意在实际开发中,我们还需要考虑异常处理,资源关闭,以及可能的事务管理等细节。 在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将...

    java-数组与方法及面向对象基础

    数组提供了方便的方式来存储和操作一组数据,但需要注意的是,一旦数组长度被创建,就无法改变。 二、方法 方法是Java中实现功能的独立代码块,可以理解为函数。方法的定义包括返回类型、名称、参数列表和主体: ...

    JNI层创建的线程中回调java方法

    因此,从本地线程回调Java方法需要特殊处理,因为这涉及到线程安全和JVM的同步问题。 在JNI中回调Java方法主要有两种方式: 1. **使用JNIEnv**:JNIEnv是一个指向一系列函数指针的结构体,它提供了在本地代码中...

    易语言JAVA调用 例子

    3. **调用Java方法**:使用`CallStaticVoidMethod`或`CallVoidMethod`等函数,根据方法是否为静态,以及传入的参数类型,调用Java方法。 4. **处理结果**:根据Java方法的返回值,易语言程序可以进行相应的操作。 ...

    提高java代码性能各种技巧

    因此,在 Java 6 中,使用 String.intern() 需要非常小心,避免使用这个方法 intern 任何无法控制的用户输入。 Java 7 中的字符串池 在 Java 7 中,Oracle 的工程师对字符串池的逻辑做了很大的改变,字符串池的...

    java和JavaScript开发细节

    在使用Hibernate进行数据库操作时,需要特别注意配置文件`hibernate.properties`中的参数设置。例如,`hibernate.connection.url`应确保正确获取数据库连接信息。此外,在配置Hibernate时,还需要关注`hibernate....

    java实现logistic回归算法

    3. **Java实现细节** - **数据结构**:创建数据类存储样本,每个样本包括特征向量和对应的标签。 - **梯度上升法**:编写梯度上升法的迭代过程,每次迭代更新模型参数。 - **计算预测概率**:使用Sigmoid函数将...

    java技巧java中可以用来循环遍历任何一个集合的通用方法

    本文将详细介绍一种在Java中循环遍历任何一个集合的通用方法,并通过示例代码来具体说明其实现过程及注意事项。 #### 1. 集合遍历的重要性 集合框架是Java中非常基础且重要的组成部分之一,它提供了存储和管理对象...

    java文件上传方法

    此方法接收两个参数:目标目录路径(`dir`)和表单文件对象(`FormFile`),返回上传后的文件名。 #### 二、依赖库及导入声明 该代码依赖于Apache Struts框架中的`FormFile`类来获取上传文件的信息。Struts是一个...

    javaEE上传文件和参数

    接下来,我们需要覆盖`doPost`方法,使用`HttpServletRequest`的`getParts()`方法来获取上传的文件和参数。`Part`接口代表了一个多部分表单的数据部分,可以是文件或文本字段。 ```java @Override protected void ...

Global site tag (gtag.js) - Google Analytics