0 0

jdk源码string的构造方法中decode的问题 求解释5

 

String构造方法String(byte bytes[], int offset, int length, String charsetName)中,

有这样一句:

char[] v = StringCoding.decode(charsetName, bytes, offset, length);

 

StringCoding的decode方法如下:

 

static char[] decode(String charsetName, byte[] ba, int off, int len)

        throws UnsupportedEncodingException

    {

        StringDecoder sd = deref(decoder);

        String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;

        if ((sd == null) || !(csn.equals(sd.requestedCharsetName())

                              || csn.equals(sd.charsetName()))) {

/*

 

问题在这里:sd不为null,则sd的requestedCharsetName和cs两个字段都与csn相同,那么为何还要用csn new一个StringDecoder?

 

如果要每次都想new一个,为何在下面还要用set(decoder, sd)将sd保存起来?

 

咋感觉把上面的条件csn.equals(sd.charsetName())改成!csn.equals(sd.charsetName())就看着顺眼了?

 

求解释?

 

*/                              

            sd = null;

            try {

                Charset cs = lookupCharset(csn);

                if (cs != null)

                    sd = new StringDecoder(cs, csn);

            } catch (IllegalCharsetNameException x) {}

            if (sd == null)

                throw new UnsupportedEncodingException(csn);

            set(decoder, sd);

        }

        return sd.decode(ba, off, len);

    }


2012年12月24日 17:59

1个答案 按时间排序 按投票排序

0 0

采纳的答案

你认真看看括号的嵌套,结构是:(非空) || !(等式1 || 等式2)

当sd非null时,只要csn不等于sd.requestedCharsetName()或者不等于sd.charsetName(),执行后面的代码。

2012年12月24日 19:35

相关推荐

    jdk源码(完整版)

    - **调试与问题解决**: 对源码的了解能帮助开发者更快定位并解决问题,尤其是在遇到JDK相关问题时。 - **贡献社区**: 掌握源码后,开发者可以参与OpenJDK项目,为Java的发展做出贡献。 总之,JDK源码的完整版为...

    JDK8源码 注释附带中文翻译

    压缩包中为JDK8的源码,在源码的注释下方附带的中文翻译,是本压缩包的亮点,下方为局部代码,示范给大家: * Sole constructor. Programmers cannot invoke this constructor. * It is for use by code emitted ...

    jdk1.8 源码中文版,jdk直接显示中文注释

    下载后直接去本机jdk目录里替换jdk中的src.zip 再打开idea就能看到中文版的源码注释 示例 https://blog.csdn.net/a7459/article/details/106495622

    jdk 源码 完整版

    通过研读源码,我们可以洞察Java的内部工作机制,学习优秀的设计模式,掌握各种API的实现细节,从而提升自己的编程技艺,解决实际开发中遇到的复杂问题。无论是初学者还是经验丰富的开发者,都应该充分利用这样的...

    自己重新编译的jdk源码jar包

    对于想了解JDK源码的朋友来说,通过调试JDK源码来学习是一个常用的方法。但是默认的情况下eclipse是不支持进入jdk源码中进行调试和显示当前变量的。 我们要明白在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样...

    jdk-8u60源码

    在本文中,我们将深入探讨JDK 8u60的源码,揭示其内部工作机制,帮助开发者更好地理解和利用这个强大的开发工具。 首先,我们关注的是"IMPORT_README"文档,这通常是项目导入或构建过程的关键指南。在阅读此文档时...

    JDK源码阅读笔记

    JDK源码阅读笔记

    jdk1.8源码+中文注释(chm格式)

    4. **接口默认方法**:JDK1.8引入了默认方法,允许接口中定义具有实现的抽象方法,解决了增加新方法导致的实现类冲突问题,同时也使得接口可以充当行为的容器。 5. **Date与Time API更新**:Java 8改进了日期和时间...

    jdk源码-补充缺少sun包下的源码

    在Java开发过程中,理解JDK源码是提升技术深度的关键步骤。JDK1.7版本的源码提供了对Java语言核心库的深入洞察,而sun包下的源码更是其中的重要组成部分,因为它们包含了Java的核心实现和一些私有API。然而,标准的...

    java JDK 源码

    Java JDK源码是Java开发工具包的原始代码集合,它为开发者提供了深入理解Java平台工作原理的机会。JDK源码包含了许多核心类库,如`javax`、`com`、`org`、`java`以及`launcher`和`sunw`等包下的类和接口。这些源文件...

    JDK中文源码

    JDK源码,JDK源码,JDK源码,JDK源码,JDK源码,JDK源码,JDK源码

    JDK源码阅读笔记LearningJDK

    JDK源码阅读笔记

    JDK源码,整合所有内容

    - **对象和类**:Java是面向对象的语言,类是其核心,JDK源码中包含了大量内置类,如`Object`、`String`、`Exception`等。 - **接口与多态**:`interface`定义了类的行为规范,多态性是Java的一大特性,体现在方法...

    jdk1.6 源码jdk1.6 源码

    深入理解JDK 1.6的源码对于Java开发者来说至关重要,因为它揭示了语言核心库的工作原理,有助于优化代码、理解和解决潜在问题。 1. **Java虚拟机(JVM)**:JDK 1.6中的JVM是Java程序执行的基础,它的主要职责是...

    jdk6 源码 SRC

    jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码

    JDK11源码 jdk-11.0.4 src源码

    6. **NIO.2的改进**:Java的非阻塞I/O(New I/O)在JDK11中进一步完善,例如`java.nio.file`包下增加了`Files.readString()`和`Files.writeString()`方法,简化了文件读写操作。 7. **JShell(REPL)**:JShell是...

    深入浅出JDK源码

    8. **字符串处理**:Java中的String类是不可变的,了解其内部构造、字符串连接的效率以及如何优化字符串操作,有助于编写高效的代码。 9. **模块系统**:Java 9引入了模块系统,它使得大型项目的组织和打包更加有序...

    jdk源码方法注释及实现

    1. **方法注释**:在JDK源码中,大部分类和方法都有详尽的JavaDoc注释,这些注释提供了关于类的功能、方法的作用以及参数和返回值的解释。例如,`java.util.ArrayList`中的`add()`方法就有详细的注释,描述了它如何...

    jdk源码包jdk-11.0.1

    10. **jdk.dynalink**:动态链接库,提供了一种方式来在运行时动态绑定方法调用,通常用于实现动态语言的功能或者高效的反射机制。 通过研究这些源码,开发者可以提升对Java平台的理解,学习如何优化代码,解决性能...

    java的jdk源码包

    第一步:安装完jdk之后,打开jdk所在目录,里面有个src.zip,这就是此jdk的所有源码 第二步:找到之后我们开始导入,选中项目点击右键,选中Build Path栏中的Configure Build Path,在Libraries中我们打开JRE ...

Global site tag (gtag.js) - Google Analytics