知识大全 全面解析Java中的String数据类型

Posted 常量

篇首语:成功需要付出代价,不成功需要付出更高的代价。。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 全面解析Java中的String数据类型相关的知识,希望对你有一定的参考价值。

全面解析Java中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  首先String不属于 种基本数据类型 String是一个对象   因为对象的默认值是null 所以String的默认值也是null 但它又是一种特殊的对象 有其它对象没有的一些特性    new String()和new String( )都是申明一个新的空字符串 是空串不是null    String str= kvill String str=new String ( kvill );的区别 在这里 我们不谈堆 也不谈栈 只先简单引入常量池这个简单的概念   常量池(constant pool)指的是在编译期被确定 并被保存在已编译的 class文件中的一些数据 它包括了关于类 方法 接口等中的常量 也包括字符串常量   看例 String s = kvill ; String s = kvill ; String s = kv + ill ; System out println( s ==s ); System out println( s ==s );

  结果为 true true   首先 我们要知结果为道Java会确保一个字符串常量只有一个拷贝   因为例子中的s 和s 中的 kvill 都是字符串常量 它们在编译期就被确定了 所以s ==s 为true 而 kv 和 ill 也都是字符串常量 当一个字符串由多个字符串常量连接而成时 它自己肯定也是字符串常量 所以s 也同样在编译期就被解析为一个字符串常量 所以s 也是常量池中 kvill 的一个引用   所以我们得出s ==s ==s ; 用new String() 创建的字符串不是常量 不能在编译期就确定 所以new String() 创建的字符串不放入常量池中 它们有自己的地址空间   看例 String s = kvill ; String s =new String( kvill ); String s = kv + new String( ill ); System out println( s ==s ); System out println( s ==s ); System out println( s ==s );   结果为 false false false

  例 中s 还是常量池中 kvill 的应用 s 因为无法在编译期确定 所以是运行时创建的新对象 kvill 的引用 s 因为有后半部分new String( ill )所以也无法在编译期确定 所以也是一个新创建对象 kvill 的应用;明白了这些也就知道为何得出此结果了    String intern()   再补充介绍一点 存在于 class文件中的常量池 在运行期被JVM装载 并且可以扩充 String的intern()方法就是扩充常量池的一个方法 当一个String实例str调用intern()方法时 Java查找常量池中是否有相同Unicode的字符串常量 如果有 则返回其的引用 如果没有 则在常量池中增加一个Unicode等于str的字符串并返回它的引用 看例 就清楚了   例 String s = kvill ; String s =new String( kvill ); String s =new String( kvill ); System out println( s ==s ); System out println( ********** ); s intern(); s =s intern(); //把常量池中 kvill 的引用赋给s System out println( s ==s ); System out println( s ==s intern() ); System out println( s ==s );   结果为 false ********** false //虽然执行了s intern() 但它的返回值没有赋给s true //说明s intern()返回的是常量池中 kvill 的引用 true  最后我再破除一个错误的理解 有人说 使用String intern()方法则可以将一个String类的保存到一个全局String表中 如果具有相同值的Unicode字符串已经在这个表中 那么该方法返回表中已有字符串的地址 如果在表中没有相同值的字符串 则将自己的地址注册到表中 如果我把他说的这个全局的String表理解为常量池的话 他的最后一句话 如果在表中没有相同值的字符串 则将自己的地址注册到表中 是错的   看例 String s =new String( kvill ); String s =s intern(); System out println( s ==s intern() ); System out println( s + +s ); System out println( s ==s intern() );   结果 cha138/Article/program/Java/ky/201311/28153

相关参考

知识大全 java中String的一些方法深入解析

java中String的一些方法深入解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对ja

知识大全 不再纠结Java中的String类

不再纠结Java中的String类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 java语言操作Oracle数据库中的CLOB数据类型

java语言操作Oracle数据库中的CLOB数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Java中的String、StringBuffer和Math类

Java中的String、StringBuffer和Math类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Java String中的HashCode和equal

JavaString中的HashCode和equal  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Oracle 数据库中的 Empty String 处理

Oracle数据库中的EmptyString处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 全面探讨PL/SQL的复合数据类型

全面探讨PL/SQL的复合数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL有

知识大全 深入了解Java的String

深入了解Java的String  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一从根本上认识ja

知识大全 JAVA对象转为Java String的几种常用方法

JAVA对象转为JavaString的几种常用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 java.lang.String类运算符重载

java.lang.String类运算符重载  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Gi