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
相关推荐
本文档是Xingyu在Android软件开发过程中的随手笔记,主要对字符串的一些常规用法作了随手记录,以备后忘,没什么技术含量, 对初学者有一定参考作用,高手就不要下了。
java中equals和'=='区别以及与字符串相关的几个函数介绍
java字符串实验题目 java string类
java数组与字符串用法小结 讲述了字符串数组的读入和读出的一些用法 主要是stringtokenizer的用法
Java 字符串的应用
JAVA 中的字符串处理及类的应用,希望能帮助到你们。
利用字符间的转化把汉字转化为英文字符主要应用于提取汉字的首字母等要求
字符串替换java类 具体应用:例如把utf-8替换成gb2312
Java Md5字符串加密类代码分享,MD5是一个比较常见的字符串加密算法,在JAVA中应用也相当普遍,这个MD5算法类或许可以直接套用,代码中的关键部分带有注释 ,方便您的使用和学习。需要使用MD5对字符串加密的,那就...
4、 给定的字符串数组:strings s[] = {“string”,”starting”,”strong”,”street”,”stir”,”studeng”,”soft”,”sting”},编写应用程序,统计以”st”开头的字符串有多少个,以”ng”结尾的字符串有多少个...
3、 按字典序 如果第一个字符串大于第二个字符串 返回大于0,如果第一个字符串等于第二个字符串 返回等于0 ,如果第一个字符串小于第二个字符串返回小于0。 4、例子 compareToIgnoreCase("HARD","hark")...
4.熟悉字符串的存储原理,掌握字符串在程序设计中的应用技术。 二、实验内容 1.上机环境配置; 2.学习程序调试方法; 3.循环及分支程序设计; 4.排序程序设计; 5.字符串(文章)中查找子字符串(单词)程序设计。 ...
编写一个Java项目,模拟一次包括老师备课,同学上课,布置作业和做作业的课堂教学过程。作业为判断字符串是否为2-重复串及其他字符串操作内容。
输入一个字符串,统计出这个字符串的英文大写字母、小写字母、数字、空格以及其它字符的个数
Java中有多种将字符串转换为列表的方法,其中最常用的是使用split()函数和Java8的Stream API。 split()函数的使用 split()函数可以将字符串按照指定的分隔符进行分割,返回一个字符串数组,我们可以通过Arrays....
该组件是对日期的一个处理组件,是日期型字符串和日期之间的相互转换
Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...
分享一个Java字符串操作类CTool.java源代码下载,包括了字符串转换功能,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。这个类的功能可实现将数据从数据库中...
Java正则表达式在字符串处理和模式匹配中扮演着重要角色。为了帮助准备面试的你更好地掌握Java正则表达式的应用,本文精选了20道复杂的面试题,并提供了详细的解析。从贪婪匹配和非贪婪匹配的概念到匹配数字、字母、...
随机产生字符串,字符串中的字符只能由特殊字符(&@#$%*),大写字母(A-Z),小写字母(a-z)以及数字(0-9)组成,且每种字符至少出现一次。这样产生字符串的方式可以应用到如下场景,比如,我们有一个应用就是添加用户完毕...