`
lanceverw
  • 浏览: 44204 次
  • 性别: 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基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    JAVA细节知识

    另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    3. 方法需要的任意参数。 2.2.4 类 类是一个蓝图或样板,定义了某种类型的所有对象的变量和方法。 在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一...

    史上最全Java面试题目大集合

    并且类可以修改或增加新的方法使之更适合特殊的需要。 18. 封装:封装是把过程和数据包围起来,19. 对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,20. 即现实世界可以被描绘成一系列完全自治...

    Java笔试题目汇总

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 (3)封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    Java程序员面试宝典

    派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。 (3).封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的方法。面向对象计算始于这个基本概念, 即...

    JAVA面试题JAVA面试题JAVA面试题JAVA面试题

    一、着装得体 根据季节需要着装,尤其是一些小细节,比如说,衣襟是否平整,纽扣是否系全等,都不能忽视,如果穿着凌乱,不注意小节,用人单位会因此联想到毕业生今后的工作态度也会不认真、不严谨,会给用人单位...

    java面试笔试题大汇总

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    达内java学习笔记-总最全

    对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。 方法的定义非常重要。方法有参数,也可能有返回值。 注意区分:对象(本身)、对象的实现者、对象的调用者。 分析对象主要从方法开始。 我们通过类...

    java程序员面试技巧

    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了 解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象...

    Java面试题大全(doc)

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    java试题经典考试试题

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    Java继承时构造函数的调用

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    张孝祥Java就业培训教程.pdf

    在第二章中,全面地讲解Java的基本语法知识,对基本语法的讲解也不是泛泛而谈,而是在其中贯穿各种实际应用中的巧妙用法和注意事项。在第三章和第四章中,透彻系统地讲解了面向对象的思想和应用。在以后的章节中,用...

    java考试题大总结

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    java面试题

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    Java基础概念

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    Java学习笔记(必看经典)

    可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法: public student(string name,int a){ } public student(int a,string name){ } 为两个不同的构造方法。 如果我们未给...

Global site tag (gtag.js) - Google Analytics