`
wangjian5748
  • 浏览: 209571 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

探讨"java编程思想(Thinking In Java)"中的一个错误

阅读更多

原文位置:

英文第二版的Holding Your Objects(第九章)--The Arrays class(节) --Comparing arrays(小节):

原文内容:

example
import java.util.*;public class ComparingArrays {  public static void main(String[] args) {    int[] a1 = new int[10];    int[] a2 = new int[10];    Arrays.fill(a1, 47);    Arrays.fill(a2, 47);    System.out.println(Arrays.equals(a1, a2));    a2[3] = 11;    System.out.println(Arrays.equals(a1, a2));    String[] s1 = new String[5];    Arrays.fill(s1, "Hi");    String[] s2 = {"Hi", "Hi", "Hi", "Hi", "Hi"};    System.out.println(Arrays.equals(s1, s2));  }}

Originally, a1 and a2 are exactly equal, so the output is “true,” but then one of the elements is changed so the second line of output is “false.” In the last case, all the elements of s1 point to the same object, but s2 has five unique objects. However, array equality is based on contents (via Object.equals( )) and so the result is “true.”

错误内容:

上面的"but s2 has five unique objects"(中文意思:s2有5个不同的对象)是错误的.其实s2中的只有一个对象,而不是5个,我们可以利用==来测试一下,代码如下:

example
System.out.println(s2[0] == s2[1]);System.out.println(s2[1] == s2[2]);System.out.println(s2[2] == s2[3]);System.out.println(s2[3] == s2[4]);输出结果:truetruetruetrue

为什么错了呢?我们大家都知道:java中对相同字符串的特殊处理,利用对象池的概念.我们也都知道在java声明字符串可以用两种方法:new和直接赋值(=).

  • 利用new,每次都生成新的对象;
  • 而利用直接赋值,每次VM都在对象池中寻找是否已有此对象,若有,则返回该对象,若没有,再生成新的对象.

对于上面这段规则,想必大家都是很清楚的.若在正常情况下,我们都会注意此类问题,但是在这类稍复杂的情况下(这儿是:把字符串生成放在数组中),我们有时就会犯错误,虽然最后结果是对的.
我是在看中文第二版时发现这个错误的(309页的中间),开始我以为是侯老师翻译错了,后来找来e文对照看,竟然是原作者错了.
后来我又和第三版(英文:改编到了第11章,中文版在306页的开头)对照一下,发现还是错误.

关于此类问题,本书中还有几处,具体位置我记不清了

Note: 注意:String类还有一个特殊方法intern,它的功能就是在对象池中寻找一个相同对象.在一些关键地方,利用这个方法可以提供处理字符串的速度.



分享到:
评论

相关推荐

    java 核心编程思想 thinking in Java

    《Thinking in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,以其深入浅出的讲解方式深受程序员喜爱。这本书旨在帮助读者理解和掌握Java的核心编程思想,从而能够运用这些概念来解决实际问题。书中的...

    java 编程思想(Thinking in Java)

    《Java编程思想》是 Bruce Eckel 的经典著作,被誉为学习Java的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是极好的资源。下面,我们将详细探讨Java编程的一些...

    Thinking in java 电子书

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...

    java编程思想书本示例和习题答案

    首先,让我们详细探讨一下Java编程思想的关键知识点: 1. **面向对象编程**:Java是一种完全面向对象的编程语言,它支持类、对象、封装、继承、多态等核心概念。在《Java编程思想》中,Eckel详细阐述了如何设计和...

    Thinking In Java 4th<Java编程思想4>

    - **书名**:《Thinking In Java 4th》(Java编程思想第四版) - **作者**:Bruce Eckel - **出版社**:MindView, Inc. #### 二、读者评论概述 1. **Jim Pleger** (Loudoun County (Virginia) Government) - 推荐...

    侯捷-Java编程思想+第2版(繁体版)

    ### 侯捷-Java编程思想+第2版(繁体版)关键知识点解析 #### 一、书籍概览与评价 - **书籍名称**:本书名为《Thinking in Java》第二版,作者为Bruce Eckel,台湾译者为侯捷与王建兴。 - **书籍定位**:本书被广泛...

    Thinking in Java 3rd Edition

    《Thinking in Java 3rd Edition》是一本深受程序员喜爱的经典Java编程教材,由Bruce Eckel撰写。这本书以其深入浅出的讲解方式,详尽全面的内容覆盖,为学习者提供了掌握Java编程的坚实基础。第三版出版时,Java...

    Thinking in Java 3th书籍以及习题解答

    《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的必读之作。这本书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术,包括面向对象编程、泛型、异常处理、集合框架、多线程、网络编程...

    THINKING IN JAVA

    《Thinking in Java》是Bruce Eckel所著的一本经典Java编程教程,被誉为是学习Java语言的理想书籍。这本书以其深入浅出、逻辑清晰的讲解方式深受读者喜爱,被多个领域的专业人士高度评价。 书中全面覆盖了Java语言...

    Thinking in Java 4th(JAVA编程思想 第四版 英文版)2

    《Thinking in Java》第四版是Bruce Eckel所著的一本Java编程经典教程,深受程序员喜爱。这本书不仅是初学者深入理解Java语言的首选读物,也是经验丰富的开发者在遇到问题时的首选参考书。作者Eckel是MindView公司的...

    Thing in Java\Thinking in Java 3rd Edition英文版,书后答案及代码

    这本书旨在帮助读者理解Java编程的核心概念,通过丰富的示例和解释来培养"思考像一个Java程序员"的能力。书后的答案和代码是学习过程中极其宝贵的资源,它们可以帮助读者验证自己的理解,解决在阅读过程中遇到的疑惑...

    Thinking_in_Java_4th_edition.pdf_java_in_javase_

    《Thinking in Java》是Bruce Eckel的经典Java编程教材,第四版更是被广大Java开发者视为学习Java的必备参考书。这本书深入浅出地介绍了Java语言的核心概念和技术,旨在帮助读者建立起扎实的Java基础,并理解面向...

    学习Java 编程思想

    《学习Java编程思想》这本书是Java开发者必读的经典之作,由Bruce Eckel撰写,被誉为深入理解Java语言的权威指南。本书全面涵盖了Java编程的核心概念和技术,旨在帮助读者建立起坚实的编程基础,培养良好的编程思维...

    Thinking in java 第三版和第四版

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java编程语言的核心概念和技术。这本书分为多个部分,涵盖了从基础语法到高级特性的全面讲解,是学习Java编程的重要参考资料。 第三版是中文版,...

    Thinking in Java(第四版) java的进阶 中文版 pdf

    这本书深入探讨了Java编程语言的核心概念和技术,旨在帮助有基础的开发者提升编程思想,拓宽技术视野。 首先,Java的基础部分是本书的起点,涵盖了变量、数据类型、运算符、流程控制等基础知识。在这一部分,你可以...

    thinking in Java, 4th Edition 完整清晰版 [Java 核心思想]

    本书《Thinking in Java》第四版是由Bruce Eckel所著,作为MindView公司的总裁,作者以其丰富的经验和深入的理解为读者呈现了一个全面且深入的Java学习指南。这本书被广大读者誉为学习Java的必读之作,它不仅覆盖了...

Global site tag (gtag.js) - Google Analytics