About String in Java

				如今做了一个重大决定,不定期温习The Basement Of Java
  1. String对象的认知简述

    首先 String不属于 8种基本数据类型, String是一个对象。 因为对象的默认值是null。但它又是一种特殊的对象,有其对象没有的一些特性。

    new String()和new String("")都是声明一个空字符串,而不是null。
  2. 常量池(constant pool)

    常量池指的是在编译期被确定,并保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
  3. 字符串池

    在JVM中存在着一个字符串池,其中保存着许多String对象,并且可以被共享使用,因此它提高了效率。String类是final的,它的值一经创建便不可改变,因此我们不用担心String由于共享而带来的程序混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
  • 例1

    public class Test {

    public static void main(String args[]) {

    String str0 = "abc";

    String str1 = "abc";

    String str2 = "a" + "bc";

    System.out.println(str0 == str1);

    System.out.println(str0 == str2);

    }

    }

    运行结果:

    true

    true

    解释:Java会确保一个字符串常量只有拷贝, 因为例子中的 str0和 str1中的” 中的” abc ”都是字符串常量, 它们在编译期就被确定了,所以 str0== str1为 true ;而” a”和” ” 和bc ”也都是字符,当一个字符由多个字符串连接而成时它自己肯定也是字符串常量,所以 s2 也同样在编译期就被解析为一个字符串常量。所以得出

    str0 = str1 = str2
  • 例2

    public class Test {

    public static void main(String args[]) {

    String str0 = "kvill";

    String str1 = new String("kvill");

    String str2 = "k" + new String("ill");

    System.out.println(str0 == str1);

    System.out.println(str0 == str2);

    System.out.println(str1 == str2);

    }

    }

    运行结果:

    false

    false

    false

    例2中str0还是常量池中”kvill”的应用,str1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,str2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用。

    明白了这些也就知道为何得出此结果了

String巩固的更多相关文章

  1. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  2. JavaScript String对象

    本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...

  3. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  4. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  5. js报错: Uncaught RangeError: Invalid string length

    在ajax请求后得到的json数据,遍历的时候chrome控制台报这个错误:Uncaught RangeError: Invalid string length,在stackoverflow查找答案时 ...

  6. c# 字符串连接使用“+”和string.format格式化两种方式

    参考文章:http://www.liangshunet.com/ca/201303/218815742.htm 字符串之间的连接常用的两种是:“+”连接.string.format格式化连接.Stri ...

  7. 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed

    之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...

  8. JavaScript中String对象的方法介绍

    1.字符方法 1.1 charAt() 方法,返回字符串中指定位置的字符. var question = "Do you like JavaScript?"; alert(ques ...

  9. 在多线程编程中lock(string){...}隐藏的机关

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...

  10. BCL中String.Join的实现

    在开发中,有时候会遇到需要把一个List对象中的某个字段用一个分隔符拼成一个字符串的情况.比如在SQL语句的in条件中,我们通常需要把List<int>这样的对象转换为“1,2,3”这样的 ...

随机推荐

  1. Shenandoah 与 ZGC

    简介 Shenandoah GC 与 ZGC 同为新一代的低延迟收集器, 分别由RedHat和Oracle开发, 目前还在实验阶段, 尚未使用于生产环境. GC的三项指标: Footprint(内存占 ...

  2. pytorch深度学习神经网络实现手写字体识别

    利用平pytorch搭建简单的神经网络实现minist手写字体的识别,采用三层线性函数迭代运算,使得其具备一定的非线性转化与运算能力,其数学原理如下: 其具体实现代码如下所示:import torch ...

  3. B树 VS B+树

    参考:https://www.cnblogs.com/vincently/p/4526560.html

  4. onchange VS onblur

    参考:https://zhidao.baidu.com/question/559052179.html

  5. popupwindow使用之异常:unable to add window -- token null is not valid

    使用popwindow中又碰到一个白痴问题,在此留作纪念,希望对大家有帮助 popupwindow之所以叫这个名字,肯定是要从某个地方弹出啦,但是从哪个地方呢?必须是指定一个view嘛 void an ...

  6. web页面的JS部分乱码了!!

    在引用的地方给出编码即可 <script type='text/javascript' src='/zbjc/resources/normal/index_page.js' charset=&q ...

  7. Android:用代码修改一行文字中某几个字的颜色

    TextView changeVideoQualityTxt = (TextView) rootView.findViewById(R.id.enter_wireless_display_txt); ...

  8. 「SP1716」GSS3 - Can you answer these queries III

    传送门 Luogu 解题思路 区间最大子段和板子题. 考虑用线段树来做. 对于一个线段树节点所包含区间,它的最大子段和有两种情况,包含中点与不包含. 不包含的情况直接从左右子树转移. 对于包含的情况: ...

  9. Docker介绍(一)

    在TES GLOBAL,我们已经爱上Docker并从Docker的0.8版本开始就在生产环境中使用它.我们的很多开发者都参加了在DockerCon欧洲上的培训.下面是我们总结的一些tips,希望可以帮 ...

  10. 对象内置的方法/内置的 Symbol 值

    内置的 Symbol 值 除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法. Symbol.hasInstance 对象的Symbo ...