知识大全 String知识点总结说明

Posted 常量

篇首语:人生就像骑单车,想保持平衡就得往前走。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 String知识点总结说明相关的知识,希望对你有一定的参考价值。

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的字符串并返回它的引用 看例 就清楚了  [Page]

  例

  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() );

  结果

  false

  kvill kvill

  true

  在这个类中我们没有声名一个 kvill 常量 所以常量池中一开始是没有 kvill 的

  当我们调用s intern()后就在常量池中新添加了一个 kvill 常量 原来的不在常量池中的 kvill 仍然存在 也就不是 将自己的地址注册到常量池中 了

  s ==s intern()为false说明原来的 kvill 仍然存在

  s 现在为常量池中 kvill 的地址 所以有s ==s intern()为true

        关于equals()和==:

  这个对于String简单来说就是比较两字符串的Unicode序列是否相当 如果相等返回true;而==是比较两字符串的地址是否相同 也就是是否是同一个字符串的引用

        关于String是不可变的

  这一说又要说很多 大家只要知道String的实例一旦生成就不会再改变了   [Page]

cha138/Article/program/Java/ky/201311/28332

相关参考

知识大全 如何存贮connection string

  关于connectionstring应该存放在哪里有许多不同的方法每个都有自己的使用场合根据MSDN和我以前编程的经验总结/摘录了一篇文章希望对大家有所帮助   在程序中要存储conne

知识大全 php打开文件fopen函数的使用说明

本篇文章是对php中的打开文件fopen函数的使用进行了详细的分析介绍需要的朋友参考下   resource fopen(string $filenamestring$m

知识大全 c#中String和string的区别

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

知识大全 VC2005中System::String转换为std::string

VC2005中System::String转换为std::string  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 ViewState与Request.Form及string和String的区别

ViewState与Request.Form及string和String的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,

知识大全 深入了解String

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

知识大全 关于String对象解析

关于String对象解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  <PREclass

知识大全 string和StringBuilder比较

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

知识大全 Javascript拓展String方法小结

Javascript拓展String方法小结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!拓展了几

知识大全 String 方法 替换 随机数

String方法替换随机数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/A