`
smvcn
  • 浏览: 34980 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Core Java2 7th 阅读笔记(一)

    博客分类:
  • Java
 
阅读更多

第四章里面讨论到JAVA的方法参数到底是值传递还是引用传递, 作者认为JAVA使用的是值传递,而在Thinking in JAVA中关于传递貌似说的是引用传递(我有点记不清了,刚才也没翻到),在网上搜了一下,更是说法纷纭,让人越看越迷糊。没办法,只好自己想办法写例子来实验一下。

先构建一个Person类,有name和age两个字段

java 代码
  1. public class Person ...{   
  2.     String name;   
  3.     int age;   
  4.        
  5.     public Person(String name,int age)...{   
  6.         this.name = name;   
  7.         this.age = age;   
  8.     }   
  9.        
  10.     public int getAge() ...{   
  11.         return age;   
  12.     }   
  13.     public void setAge(int age) ...{   
  14.         this.age = age;   
  15.     }   
  16.     public String getName() ...{   
  17.         return name;   
  18.     }   
  19.     public void setName(String name) ...{   
  20.         this.name = name;   
  21.     }   
  22.   
  23. }   

然后再设计一个personSwap方法,传入两个Person对象引用,先对这两个对象引用进行对象交换操作,然后再对两个对象中的name字段值进行交换操作。最后,在main中调用方法。最后生成的结果我都写在了注释中

java 代码
  1. public class PersonUtil ...{   
  2.   
  3.     public static void personSwap(Person a, Person b) ...{   
  4.         /** 
  5.          * 传入的对象引用,这里指向的对象和在传入前的是一样的   
  6.          * 打印结果  
  7.          * ------------------swapbegin------------------   
  8.          * Person a:Person@11b86e7 name:aaa age:1   
  9.          * Person b:Person@35ce36 name:bbb age:2  
  10.          */  
  11.         System.out.println("------------------swap begin------------------");   
  12.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  13.                 + a.getAge());   
  14.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  15.                 + b.getAge());   
  16.         System.out.println();   
  17.   
  18.         /**  
  19.          * 开始交换对象   
  20.          * 打印结果  
  21.          * ------------------swap reference------------------  
  22.          *  Person a:Person@35ce36 name:bbb age:2   
  23.          *  Person b:Person@11b86e7 name:aaa age:1  
  24.          */  
  25.         System.out   
  26.                 .println("------------------swap reference------------------");   
  27.         Person tmp1 = a;   
  28.         a = b;   
  29.         b = tmp1;   
  30.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  31.                 + a.getAge());   
  32.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  33.                 + b.getAge());   
  34.         System.out.println();   
  35.            
  36.         /**  
  37.          * 交换对象中name字段的值   
  38.          * 打印结果   
  39.          * ------------------swap field value------------------   
  40.          * Person a:Person@35ce36 name:aaa age:2   
  41.          * Person b:Person@11b86e7 name:bbb age:1  
  42.          */  
  43.         System.out   
  44.                 .println("------------------swap field value------------------");   
  45.         String tmp2 = a.getName();   
  46.         a.setName(b.getName());   
  47.         b.setName(tmp2);   
  48.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  49.                 + a.getAge());   
  50.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  51.                 + b.getAge());   
  52.         System.out.println();   
  53.            
  54.         /**  
  55.          * 交换完成后   
  56.          * 打印结果   
  57.          * ------------------swap end------------------  
  58.          * Persona:Person@35ce36 name:aaa age:2   
  59.          * Person b:Person@11b86e7 name:bbb age:1  
  60.          */  
  61.         System.out.println("------------------swap end------------------");   
  62.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  63.                 + a.getAge());   
  64.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  65.                 + b.getAge());   
  66.         System.out.println();   
  67.     }   
  68.   
  69.     public static void main(String[] args) ...{   
  70.         Person a = new Person("aaa"1);   
  71.         Person b = new Person("bbb"2);   
  72.   
  73.         /**  
  74.          * 生成两个对象,对象引用为a、b   
  75.          * 在交换前的初始数据   
  76.          * 打印结果  
  77.          * ------------------before swap------------------   
  78.          * Person a:Person@11b86e7 name:aaa age:1   
  79.          * Person b:Person@35ce36 name:bbb age:2  
  80.          */  
  81.         System.out.println("------------------before swap------------------");   
  82.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  83.                 + a.getAge());   
  84.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  85.                 + b.getAge());   
  86.         System.out.println();   
  87.   
  88.         PersonUtil.personSwap(a, b); // 调用方法,进入方法体   
  89.   
  90.         /**  
  91.          * 方法调用结束,返回main() 打印结果   
  92.          * ------------------after swap------------------  
  93.          * Person a:Person@11b86e7 name:bbb age:1   
  94.          * Person b:Person@35ce36 name:aaa age:2  
  95.          */  
  96.         System.out.println("------------------after swap------------------");   
  97.         System.out.println("Person a:" + a + " name:" + a.getName() + " age:"  
  98.                 + a.getAge());   
  99.         System.out.println("Person b:" + b + " name:" + b.getName() + " age:"  
  100.                 + b.getAge());   
  101.     }   
  102.   
  103. }   

其结果很明显,java的对象引用传递并不是直接把引用传递进去的,否则,在离开personSwap方法后,a和b所指向的对象应该对调了才是。应该说,core java2所说的传递引用拷贝是正确的,换言之,JAVA是传值的,它把整一个对象传了进去,因此我们可以对该对象的字段进行操作,但是我们不能改变对象引用所指的对象。

分享到:
评论

相关推荐

    JAVA核心编程第七版Core Java2 7th 第一部分

    JAVA核心编程第七版Core Java2 7th CHM格式 第一部分,共两部分 第二部分链接:http://download.csdn.net/source/396344

    Core Java2 7th源码

    《Core Java2 7th》是一本经典的Java编程教材,主要涵盖了Java语言的核心特性以及面向对象编程的基础知识。源码通常包含书中示例程序的实现,对于学习者来说是理解和实践书中理论的重要辅助资料。本压缩包可能包含了...

    core java2 7th Edition

    《Core Java2 7th Edition》是一本深受程序员喜爱的经典Java教程,由Cay S. Horstmann和Gary Cornell合著。这本书详细介绍了Java编程语言的核心概念和技术,旨在帮助读者深入理解和熟练掌握Java编程。 首先,书中...

    core java 7th上

    《Core Java 7th》是Java编程领域的一本经典著作,专注于Java的核心概念和技术,尤其适合初学者和有一定基础的开发者。这本书详细介绍了Java 7版本的重要特性,为读者提供了全面而深入的理解。 1. **Java简介**:...

    JAVA核心编程第七版Core Java2 7th 第二部分

    JAVA核心编程第七版Core Java2 7th 第二部分 共两部分 第一部分链接:http://download.csdn.net/source/396322

    core java2 7th 卷2 源码

    《Core Java2 7th 卷2:高级编程》是Java开发领域的一本经典著作,主要面向已经掌握Java基础的开发者,深入探讨了Java的高级特性和编程实践。该书的源码提供了丰富的实例,帮助读者更好地理解和应用书中介绍的概念。...

    Core Java 2 7th Edithon(英文版)

    《Core Java 2 7th Edition》是Java编程领域中一本经典的教材,主要面向有一定编程基础的读者,深入讲解了Java语言的核心概念和技术。这本书分为两卷,Volume I 和 Volume II,分别涵盖不同的主题。 Volume I 侧重...

    core java2 7th 卷1 源码

    《Core Java 2 7th 卷1》是Java编程领域经典的教材之一,主要针对Java的基础部分进行深入讲解。源码通常包含书中示例程序,是理解书中理论知识的重要辅助资料。现在我们来详细探讨一下这个主题。 1. **Java语言基础...

    Java.2.核心技术(第7版).CoreJAVA.7th.Edithon_ebook_code.part1

    这是英文版的,里面有代码,中文版卷一6个包,卷二7个包。

    Java 2 核心技术(第7版) CoreJAVA 7th Edithon(chm版)

    第一卷《Core Java 2 Volume I》主要关注基础概念和技术,包括: 1. **Java语言基础**:介绍Java语言的基本语法,如数据类型、变量、运算符、控制结构(if、switch、for、while)、方法和异常处理。 2. **类和对象**...

    CoreJAVA 7th Edithon

    《CoreJAVA 7th Edithon》是Java编程领域的一本权威教材,专注于核心Java语言的深入解析。这本书第七版的发布,意味着它已经经过了多次更新和改进,以适应不断发展的Java技术生态。其中英文版和源代码的提供,为读者...

    corejava 7th 卷2以及源码

    《Core Java 7th 卷2》是一本深入讲解Java编程的经典教材,主要面向有经验的程序员,旨在帮助他们深入理解Java的核心概念和技术。这本书涵盖了Java语言的高级特性,包括多线程、网络编程、I/O流、集合框架、反射、...

    Prentice Hall PTR - Core Java 2 Volume I 7th Edithon.part2.rar

    Prentice Hall PTR - Core Java 2 Volume I 7th Edithon.part1.rar 第一包,开发java非常值得一读的书籍,强烈推荐

    core_java_2(7th)code.rar_core java 2

    该压缩包文件“core_java_2(7th)code.rar_core java 2”包含两部分内容:www.pudn.com.txt 和 v1。前者可能是一个链接或说明文件,后者则可能是一个代码目录或者代码示例的集合。这部分内容通常用于配合书籍的讲解,...

    Pro ASP.NET Core MVC 2 (7th) 中文版

    《Pro ASP.NET Core MVC 2 (7th) 中文版》是一本深入讲解ASP.NET Core MVC 2技术的专业书籍,适合C#开发者学习使用。该书涵盖了从基础到高级的多个方面,旨在帮助读者全面理解并掌握这个强大的Web开发框架。 ASP...

    Prentice Hall PTR - Core Java 2 Volume I 7th Edithon.part1.rar

    Prentice Hall PTR - Core Java 2 Volume I 7th Edithon.part1.rar 开发java非常值得一读的书籍,强烈推荐

    Core Java 2 Volume II 7th Edition

    电子书《Core Java 2 Volume II 7th Edition.chm 》经典

Global site tag (gtag.js) - Google Analytics