`
pengfeicao521
  • 浏览: 143918 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java中String类的理解

阅读更多
一,关于String类的说明
1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能
再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的(immutable).

2.String类有一个特殊的创建方法,就是使用""双引号来创建.例如new String("i am")实际创建了2个
String对象,一个是"i am"通过""双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同,
一个是编译期,一个是运行期(new)!

3.java对String类型重载了+操作符,可以直接使用+对两个字符串进行连接.

4.运行期调用String类的intern()方法可以向String Pool中动态添加对象.

String的创建方法一般有如下几种
1.直接使用""引号创建.
2.使用new String()创建.
3.使用new String("someString")创建以及其他的一些重载构造函数创建.
4.使用重载的字符串连接操作符+创建.

例1  
    String s1 = "sss111";

    //此语句同上
    String s2 = "sss111";
  
    System.out.println(s1 == s2); //结果为true

例2
  
    String s1 = new String("sss111");

    String s2 = "sss111";

    System.out.println(s1 == s2); //结果为false

例3
    String s1 = new String("sss111");
  
    s1 = s1.intern();
   
    String s2 = "sss111";

    System.out.println(s1 == s2);

例4
    String s1 = new String("111");
    String s2 = "sss111";
   
  
    String s3 = "sss" + "111";//在stringpool创建的常量,在编译期就已经确定
    String s4 = "sss" + s1;//s1要在运行期才能确定,而且是在堆中创建

    System.out.println(s2 == s3); //true
    System.out.println(s2 == s4); //false
    System.out.println(s2 == s4.intern()); //true

例5
这个是The Java Language Specification中3.10.5节的例子,有了上面的说明,这个应该不难理解了
    package testPackage;
    class Test {
            public static void main(String[] args) {
                    String hello = "Hello", lo = "lo";
                    System.out.print((hello == "Hello") + " ");
                    System.out.print((Other.hello == hello) + " ");
                    System.out.print((other.Other.hello == hello) + " ");
                    System.out.print((hello == ("Hel"+"lo")) + " ");
                    System.out.print((hello == ("Hel"+lo)) + " ");
                    System.out.println(hello == ("Hel"+lo).intern());
            }
    }
    class Other { static String hello = "Hello"; }
    package other;
    public class Other { static String hello = "Hello"; }

输出结果为true true true true false true,请自行分析!


结果上面分析,总结如下:
1.单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中.
2.使用new String("")创建的对象会存储到heap中,是运行期新创建的.
3.使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中.
4.使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在heap中.
6.使用"aa" + s1以及new String("aa" + s1)形式创建的对象是否加入到String Pool中我不太确定,可能是必须
调用intern()方法才会加入,希望高手能回答

还有个特殊发现:
String s1 = "s1" + "s2"编译后会在String Pool中加入"s1s2"和"s1" 2个常量,但是没有加入"s2",不知道是什么规律??试了String s1 = "s1" + "s2" + "s3" + "s4",还是只加入了"s1s2s3s4"和"s1",好像除了第一个后面的都不加入了.

还有几个经常考的面试题:
1.
String s1 = new String("s1") ;
String s2 = new String("s1") ;
上面创建了几个String对象?
答案:3个 ,编译期Constant Pool中创建1个,运行期heap中创建2个.
分享到:
评论

相关推荐

    java基础String类选择题练习题

    根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...

    介绍java中String类的方法

    Java中的String类是编程中非常基础且重要的一个类,它代表不可变的字符序列,即一旦创建...掌握这些基本的String类知识和方法对于Java编程至关重要,它们在日常开发中被广泛应用,理解并熟练运用能提高代码质量和效率。

    java自制string类例程

    在Java编程语言中,String类是一个非常基础且重要的部分,它是不可变的,也就是说一旦创建了一个String对象,就...在实际编程中,虽然我们通常使用内置的String类,但这种实践性的学习方式无疑能加深对Java编程的理解。

    Java的String类

    在Java编程中,`String`类是最常用的数据类型之一,用于处理文本数据。它是一个不可变类,意味着一旦创建了一个`String`对象,其内容就不能更改。这使得`String`类在多线程环境中非常安全,同时也带来了一些性能上的...

    java中的String类常用方法解析(一)

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...

    Java中String类的详细文档打印版

    ### Java中String类详解 #### 引言 在Java编程语言中,`String`类扮演着至关重要的角色,它用于表示字符序列。本文档旨在深入探讨`String`类的特性和功能,帮助开发者更好地理解和应用这一核心类。 #### String类...

    java中String类的知识

    ### Java中String类的知识 #### 一、String 类概述与创建方式 在Java语言中,`String`类是用于表示不可变字符序列的核心类之一。它代表了一个字符串对象,一旦被初始化后,其内容不能被改变。这被称为不可变性...

    深入解析 Java 中的 String 类:特性与使用

    通过本文的介绍,我们希望能够帮助读者更好地理解和使用 Java 中的 String 类。 对于想要进一步探索 Java String 类的读者,建议阅读 Java 官方文档和相关书籍,以获取更深入的理解和高级技巧。同时,实践是最好的...

    java String类的实现

    Java中的`String`类是编程中最常用的类之一,它在Java的`java.lang`包中,无需显式导入即可使用。`String`类代表不可变的字符序列,这意味着一旦创建了`String`对象,它的值就不能改变。这个特性使得`String`在处理...

    深入了解java 中的String

    深入了解Java中的String类是至关重要的,因为String在Java编程中占据着极其重要的位置。下面将对给定的信息进行深入分析: ### 1. String 类是 final 的,不可被继承 在Java中,`String` 类被声明为 `final` 类型...

    Java中String类.pdf

    Java中的String类是编程中最常用的数据类型...总之,Java中的String类是处理文本数据的基础,理解其构造方法和常用方法对于提升编程效率和代码质量至关重要。程序员需要熟悉这些特性,以便在实际项目中有效地利用它们。

    JAVA JSON;String 转换为 java类

    在这种情况下,可以使用`@JsonProperty`注解指定映射关系,并在Java类中使用`null`作为默认值。 6. **处理数组** 对于JSON数组,可以使用`List`或`Array`类型来表示。例如,如果有`friends`数组,可以这样做: ``...

    java String类常用方法练习小结

    在Java编程语言中,`String`类是一个非常重要的类,它代表不可变的字符序列。所有的字符串字面值(例如:"abc")都是`String`类的实例。本篇文章将深入探讨`String`类的一些常用方法,并通过实际例子帮助你更好地...

    JAVA中String与StringBuffer的区别 自己的学习笔记总结

    在Java编程语言中,`String` 和 `StringBuffer` 都是非常重要的类,它们用于处理字符串数据。虽然它们都实现了字符串操作的功能,但它们之间存在一些重要的区别,这些区别主要体现在性能、线程安全以及可变性等方面...

    java中String类型和int类型比较及相互转换

    本文将深入探讨Java中String类型和int类型之间的比较方法以及相互转换的技术,这对于理解和优化代码逻辑、提升程序性能具有重要意义。 ### 一、String类型与int类型的基本概念 #### 1.1 String类型 String类型在...

    小心String的陷阱——深入剖析Java中String的处理机制

    标题和描述均强调了在Java中处理`String`对象时可能遇到的陷阱,尤其是在理解和使用`String`的处理机制上。文章由天津工业大学软件工程专业的翁龙辉撰写,旨在深入剖析`String`在Java中的独特行为及其潜在的陷阱。...

    JAVA中String类与StringBuffer类的区别

    在Java编程语言中,String类和StringBuffer类是处理字符串的两种主要方式,它们各自有不同的特性和适用场景。理解二者的区别对于编写高效、优化的代码至关重要。 1. **String类**: - **不可变性**:String类的...

    Java中String类的方法及说明.pdf

    Java中的String类是Java语言中最基础且至关重要的类之一,它代表不可变的字符序列。在Java中,字符串被广泛用于各种数据处理和文本操作。本文将深入探讨String类的一些关键方法及其用法。 首先,让我们看看String类...

    java中String_十六进制String_byte[]之间相互转换

    ### Java中String、十六进制String与byte[]之间的相互转换 在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。...

    我们一起学Java之String

    Java中的String类是一个重要的数据类型,用于存储和操作字符串数据。String类的特点是不可变性,也就是说,一旦String对象被创建,其值就无法改变。这一特性对于Java内存管理有着重要影响,因为String对象会存储在...

Global site tag (gtag.js) - Google Analytics