intern 方法 返回从字符串常量池中唯一的字符串。
所有的字符串和字符串常量表达式的值都是interned。
即在Java中所有的编译时字符串常量都自动使用了intern()方法是interned,
”abc” 和 String s = “abc” 都是interned。
Java中其它的基本数据类型 比如(any boolean, any byte, any char from 0 to 127, and any short or int between −128 and 127) 都是interned。
Integer类型示例:
1: Integer i1 = 3; Integer i2 = Integer.valueOf(3); Integer i3 = new Integer(3); i1 == i2 true i1 == i3 false i2 == i3 false 3 == i3 true 2: Integer m1 = 390; Integer m2 = Integer.valueOf(390); Integer m3 = new Integer(390); m1 == m2 true m1 == m3 false m2 == m3 false 390 == m3 true
字符串比较:
字符串类型示例:
1: long t1 = System.currentTimeMillis(); String ss1 = "asd"; String ss2 = new String("asd"); for (int i = 0; i < 100000000; i++) { if (ss1.equals(ss2)) { } } long t2 = System.currentTimeMillis(); System.out.println(t2 - t1); 2: long t3 = System.currentTimeMillis(); String ss3 = "jkl"; String ss4 = new String("jkl").intern(); for (int i = 0; i < 100000000; i++) { if (ss3 == ss4) { } } long t4 = System.currentTimeMillis(); System.out.println(t4 - t3); 3: long t5 = System.currentTimeMillis(); String ss5 = "fgh"; String ss6 = new String("fgh"); for (int i = 0; i < 100000000; i++) { if (ss5.equalsIgnoreCase(ss6)) { } } long t6 = System.currentTimeMillis(); System.out.println(t6 - t5);
示例1,2,3测试3次的平均运行所需时间为1285.6ms,32.6ms,1869.3ms,
可以看出示例1大概是示例2的40倍,示例1大概是示例3的2/3倍。
equals():先是比较比较两个对象是否相等,如果不相等再逐个字符进行比较。
intern()后再 == :字符串或字符串常量表达式是直接生成在JVM常量池中的字符串。intern()方法执行时先是查看常量池中有没有相同的字符串,如果有返回已存在的字符串,如果没有则把字符串放入常量池,再返回该字符串,每个字符串在常量池中都有唯一的标识符,比较时就是使用这个唯一标识符经行比较。new String() 是在JVM堆中和常量池中各一份, 比较的时候是和堆中的字符串对象进行比较。
equalsIgnoreCase():先是比较比较两个对象是否相等,如果不相等再逐个字符进行比较是否相等,如果不相等再转为大写字符进行比较,对于特殊的格鲁吉亚字母如果不相等再转为小写字符进行比较。
字符串连接:参见[1]
package testPackage; class Test { public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " "); System.out.print((hello == ("Hel"+"lo")) + " "); System.out.print((hello == ("Hel"+lo)) + " "); System.out.println(hello == ("Hel"+lo).intern()); } }
输出:true true false true
第二个是在编译时的常量表达式进行连接,编译器进行优化使用同样的字符串;
第三个是在运行时连接重新生成新的字符串。
CharSequence 是个接口开始于Java 1.4,文档中的解释是可读的字符序列, 它的直接子类有CharBuffer, Segment, String, StringBuffer, StringBuilder。因此当你希望你的API接受这些类时CharSequence是个不错的选择。CharSequence的实现类没有全部实现equals/hashCode方法,当你需要Map或者依赖equals/hashCode时,应当使用String或者把CharSequence转为String。在涉及密码等安全信息是应当使用CharSequence或者char而不是String。
在Java8 之前CharSequence的作用可能非常有限,一般应该被用在字符串处理操作中。一个CharSequence不能保证是不可变的,而String是可以保证不可变的。
StringTokenizer
StringCharacterIterator
1. Jls8 3.10.5 String Literals
2. http://stackoverflow.com/questions/13234584/when-to-use-charsequence
3. http://stackoverflow.com/questions/11323962/exact-difference-between-charsequence-and-string-in-java
4. http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords
相关推荐
以下是对"JAVA 字符串应用笔记"中可能涉及的一些核心知识点的详细阐述: 1. **字符串对象创建**: Java中有两种创建字符串的方式:`new String()`构造器和字面量`"..."`。字面量方式会创建一个常量字符串,存储在...
在Java编程语言中,字符串处理是一项基础且重要的任务。标题提到的"Java检索字符串中是否存在某字符",实际上涉及到字符串的查找算法。这里主要讨论的是KMP(Knuth-Morris-Pratt)算法,这是一种高效的字符串匹配...
Java 字符串应用笔记 在 Java 中,字符串是最基本的数据类型之一,理解字符串的应用是 Java 开发的基础。本篇笔记将详细介绍 Java 中 equals 和 == 的区别、字符串相关的几个函数介绍、String 和 StringBuffer 的...
总之,Java中的字符串分解是一个基础且重要的概念,广泛应用于数据处理、日志分析、文本解析等场景。熟练掌握`split()`方法及其背后的正则表达式原理,对于提升Java编程能力非常有帮助。通过`StringDemo_13.java`...
在Java编程语言中,字符串(`String`)是极其重要的一个概念,被广泛应用于各种场景之中。为了更好地理解和运用Java语言,掌握字符串的各种操作方法至关重要。下面将详细介绍Java中字符串的一些关键操作方法及其应用...
### JAVA日期与字符串的转换 在Java编程中,经常需要将日期对象转化为字符串形式以便于存储或显示,或者反过来将字符串转化成日期对象来进行日期计算等操作。本文将详细介绍如何在Java中实现这两种转换。 #### 一...
在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...
在Java中生成随机字符串是一项基础而重要的任务,不同的应用场景可能需要选择不同的方法。通常情况下,对于普通应用,使用`java.util.Random`就足够了;而对于安全性要求较高的场景,则推荐使用`java.security....
在Java编程语言中,分割字符串是一项常见的操作,它允许我们将一个长字符串分解成多个子字符串,每个子字符串对应原字符串中的某个部分。这通常通过使用`String`类提供的`split()`方法来完成。本篇文章将深入探讨...
### Java中的字符串相关处理 #### 引言 在Java编程语言中,字符串处理是一个核心且广泛使用的领域。...了解和熟练掌握这些基本概念,对于Java开发者而言至关重要,尤其是在开发涉及大量字符串处理的应用程序时。
通过运行和调试这些代码,你可以加深对Java字符串、正则表达式以及日期时间格式化的理解。 总之,理解和熟练掌握Java中的字符串操作、正则表达式以及日期时间格式化对于任何Java开发者来说都是必不可少的技能。通过...
Java中的字符串处理是编程的基础之一,理解`String`和`StringBuffer`的区别以及如何使用这些类对于开发高质量的Java应用程序至关重要。掌握字符串的构造方法和操作技巧可以帮助开发者编写出更加高效、易于维护的代码...
通过以上分析,我们可以看到使用JDOM库在Java中解析和操作XML字符串的完整过程。这包括了如何将XML字符串转换为可读写的数据结构,以及如何遍历、读取和修改XML文档的元素和属性。这对于在Java应用程序中处理动态...
Java 实现字符串的匹配 Java 是一种广泛应用于软件开发的编程语言,而字符串匹配是 Java 中一个常见的应用场景。本文将介绍如何使用 Java ...在实际应用中,可以根据需要选择合适的算法和数据结构来实现字符串匹配。
Java中的字符串去重特性是Java 8 Update 20引入的一种优化机制,旨在减少内存消耗,特别是对于大量字符串操作的应用。这一特性依赖于G1(Garbage First)垃圾回收器,G1是Java 8中默认关闭的一个高级垃圾回收算法。...
在Java编程语言中,字符串处理是一项基础且重要的任务。在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。...
本文将深入探讨“JAVA可逆带秘钥字符串加密算法”,这是一种允许数据在加密后仍能通过正确的密钥解密回原始形式的加密技术。 在Java中,最常见的可逆加密算法包括DES(Data Encryption Standard)、3DES(Triple ...
在Java编程语言中,字符...理解字符串的长度判断和截取是Java编程的基础,它们在实际编程中有着广泛的应用,例如在输入验证、数据处理、格式化输出等场景。熟练掌握这些基本操作,将有助于编写出更加高效和可靠的代码。
在Java编程语言中,字符串是极其重要且常用的数据类型。字符串处理是许多程序的核心部分,而`split()`方法就是处理字符串的一个关键工具。这个方法允许我们根据特定的分隔符将一个字符串分割成多个子字符串,这对于...
在Java编程中,给字符串编号通常涉及到字符串处理和循环结构的应用。这可能包括在字符串的每个元素前或后添加特定的编号,或者按照特定规则生成编号字符串。以下是一些关于如何在Java中实现这一功能的关键知识点: ...