`
peonyzzdx
  • 浏览: 590569 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

String一系列知识点

 
阅读更多
一、intern()方法
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

        String str1 = new String("123");
        String str2 = "123";
       
        String str3 = str1.intern();
       
        System.out.println((str1 == str2) +","+ (str3 == str2));// 输出结果:false,ture
       
       
        String str4 = new String("234");
        String str5 = new String("234");
       
        String str6 = str4.intern();
        String str7 = str5.intern();
       
        System.out.println((str4 == str5) +","+ (str6 == str7));// false,true


自己理解:intern相当于把new String("123");变为了 String aa = "123";




二、String a = new String();
String b =  new String("");

a和b都是"",不是null

三、 //在池中和堆中分别创建String对象"abc",s1指向堆中对象
        String s1 = new String("abc");
        //s2直接指向池中对象"abc"
        String s2 = "abc";
        //在堆中新创建"abc"对象,s3指向该对象
        String s3 = new String("abc");
        //在池中创建对象"ab" 和 "c",并且s4指向池中对象"abc"
        String s4 = "ab" + "c";
        //c指向池中对象"c"
        String c = "c";
        //在堆中创建新的对象"abc",并且s5指向该对象
        String s5 = "ab" + c;

        String s6 = "ab".concat("c");
        String s7 = "ab".concat(c);

        System.out.println("------------实串-----------");
        System.out.println(s1 == s2); //false
        System.out.println(s1 == s3); //false
        System.out.println(s2 == s3); //false
        System.out.println(s2 == s4); //true
        System.out.println(s2 == s5); //false
        System.out.println(s2 == s6); //false
        System.out.println(s2 == s7); //false

四、
经典题目:
       
String s1 = "spring";
        String s2 = s1 + "summer";
        s1.concat("fall");/* 产生一个字符串,但是不改变s1的值,此时                                             s1="spring",mm=s1.concat("fall");则mm=springfall (注意没有空格)*/
        s2.concat(s1);
        s1 += "winter";
        System.out.println(s1 + " " + s2);

        输出是什么?总共创建了几个String对象?和几个引用变量?

        答案:
              运行结果为:springwinter springsummer
              总共创建了8个String对象:"spring", "summer" ,"springsummer" ,"fall", "springfall",
                                                     "springsummerspring ", "winter" ,"springwinter".
              两个引用变量: s1 与 s2
-----------------------------------------------------------------------------------------------------------------------
      随着应用程序的增长,String字面值占用大量的程序内存,对于程序而言,全部的String的字面值往往有大量的冗余。为了使java更高效的使用内存,JVM留出一块特殊的内存区域,称为"String常量池"。当编译器遇到String字面值时,它先检查该池内是否存在一个相同的String字面值。如果找到了,则将新的引用指向这个现有的String,而不是创建新的String对象。如果在String常量池没有这个String则java将在常规内存创建一个新的String对象,并且引用它,而这个String也会放入池中。

见http://deony2jacob1314.iteye.com/admin/blogs/1740022 第8。



concat方法

该方法的作用是进行字符串的连接,将两个字符串连接以后形成一个新的字符串。例如:
                                     String s = “abc”;

                                     String s1 = “def”;

                                     String s2 = s.concat(s1);

则连接以后生成的新字符串s2的值是”abcdef”,而字符串s和s1的值不发生改变。如果需要连接多个字符串,可以使用如下方法:
                                     String s = “abc”;

                                     String s1 = “def”;

                                     String s2 = “1234”;

         String s3 = s.concat(s1).concat(s2);
则生成的新字符串s3的值为”abcdef1234”。

其实在实际使用时,语法上提供了一种更简单的形式,就是使用“+”进行字符串的连接。例如:
         String s = “abc” + “1234”;
则字符串s的值是”abc1234”,这样书写更加简单直观。
而且使用“+”进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。而且“+”匹配的顺序是从左向右,如果两边连接的内容都是基本数字类型则按照加法运算,如果参与连接的内容有一个是字符串才按照字符串进行连接。
例如:
         int a = 10;
         String s = “123” + a + 5;
则连接以后字符串s的值是“123105”,
计算的过程为首先连接字符串”123”和变量a的值,生成字符串”12310”,然后使用该字符串再和数字5进行连接生成最终的结果。
而如下代码:
         int a = 10;
         String s = a + 5 + “123”;
则连接以后字符串s的值是”15123”,
计算的过程为首先计算a和数字5,由于都是数字型则进行加法运算或者数字值15,然后再使用数字值15和字符串”123”进行连接获得最终的结果。
而下面的连接代码是错误的:
         int a = 12;
         String s = a + 5 + ‘s’;
因为参与连接的没有一个字符串,则计算出来的结果是数字值,在赋值时无法将一个数字值赋值给字符串s。



java中,String a = null , String a = "" 和String a 这三个之间的区别和各自适合的用法?

String a;  申明一个string类型的 a,即没有在申请内存地址,更没有在内存任何指向引用地址;

String a = null ;   申明一个string类型的 a,同时在内存里申请了一个地址,但是该地址不指向任何引用地址;

String a = "" ;申明一个string类型的 a,既在内存里申请了地址,该地址又指向一个引用该字符串的引用地址;
分享到:
评论

相关推荐

    java基础知识点汇总

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 #### 1.4 多态性 多态性是指允许不同类的对象对同一消息作出响应。多态性包括...

    2021 - JAVA秋招基础知识点面试题

    容器类用于存储对象集合,并提供了一系列操作集合的方法。理解不同容器的特性和使用场景是面试考察的一个重要方面。 以上知识点是Java秋招面试中常见的基础知识,对于求职者来说,掌握这些内容是非常重要的。面试官...

    string 类提供了一系列用于处理字符串方法

    以下是对标题和描述中所述知识点的详细说明: 1. **构造函数**: - 空字符串构造:通过默认构造函数可以创建一个不包含任何字符的空字符串。 - 字符数组初始化:可以直接使用字符数组来创建一个`std::string`对象...

    少儿编程C++初级基础知识点.zip

    【少儿编程C++初级基础知识点】是针对初学者设计的一系列C++编程教学内容,旨在帮助孩子们建立起坚实的编程基础。这个压缩包包含了多个章节的源代码文件,涵盖了C++语言的基础概念和关键语法,让我们逐一解析这些...

    C语言知识点总结

    十、数组:数组是一系列相同类型的变量的集合,通过一个下标来访问数组中的元素。数组的定义格式为“类型名 数组名[数组长度];”。 十一、字符串函数:处理字符串时通常会使用到<string.h>头文件中声明的字符串处理...

    java综合知识点总结

    Collections是集合类的工具类,提供了一系列静态方法,用于操作集合。 15. Java的基本数据类型:包括整型(byte, short, int, long),浮点型(float, double),字符型(char)和布尔型(boolean)。 这些只是...

    java要掌握的面试知识点

    Collections是Java提供的工具类,提供了一系列静态方法用于操作集合,如排序、查找、填充等,同时也提供了线程安全的集合操作。 以上是Java面试中常见的知识点,掌握这些内容有助于提升面试表现和实际开发能力。在...

    c#中string转换成字节byte的处理方法

    当需要将整个字符串转换为一系列字节时,通常会使用 `System.Text.Encoding` 类来完成这一任务。`Encoding.UTF8.GetBytes()` 和 `Encoding.ASCII.GetBytes()` 是两种常用的编码方式。 #### 2.1 使用UTF-8编码 UTF-8...

    把string类型改为char类型的实例

    `String` 类型用于表示一系列字符的集合,而 `char` 类型则代表单个字符。有时我们需要将一个字符串转换成字符数组来进行处理,例如分析文本或执行特定的计算任务。 #### 转换方法 在Java中,可以使用 `String` 类...

    java知识点复习

    ### Java知识点复习:深入解析 #### 重要概念:原始类型与引用类型 在Java中,数据类型分为两大类:原始类型和引用类型。原始类型直接存放数据,如`int`、`char`、`float`等,它们在内存中占用固定的字节数,不...

    字符串string.zip

    文件“Chapter15”可能是指第十五章的内容,这通常会是一个完整的单元,涵盖了一系列关于字符串的理论知识、实例解析和实践练习。 1. **字符串基础知识**:在Java中,字符串是不可变的对象,这意味着一旦创建,就不...

    string-calc-master_Internet/网络编程_rest582_String.internet_payment

    在压缩包文件名称列表中,"string-calc-master"可能包含了一系列源代码文件、配置文件、测试文件等,这些文件将揭示项目的具体实现细节。常见的文件结构可能有以下部分: 1. `src/`:源代码目录,可能包含`main`和`...

    《深入学习c++string》2.1版

    C++标准库中的`<algorithm>`头文件提供了一系列可用于`std::string`的操作,如`remove`、`unique`、`sort`等,使字符串处理更加方便。 5. string 与wstring `std::wstring`是宽字符版本的`std::string`,用于处理...

    jdbc相关知识点的MindMap

    - `ResultSet`代表执行查询后的结果集,可以遍历结果集中的一系列行。 - 方法包括: - `next()`: 移动到结果集中的下一行。 - `getString(String columnName)`: 获取指定列名的字符串值。 - `getInt(String ...

    ios string test

    `string-test.zip`可能包含一系列字符串操作的测试用例,帮助开发者了解字符串处理的性能和效果。`uthashtest.zip`可能是UTHash库的测试代码,用于验证其正确性和性能。 总的来说,这些测试涵盖了iOS开发中的基本...

    2021Java高级架构面试知识点整理V1.0

    在IT行业中,面试高级架构师职位通常需要对一系列核心知识点有深入的理解和掌握。以下是对“2021Java高级架构面试知识点整理V1.0”文档中提及的关键知识点的详细解读: 1. 消息队列的应用场景与优缺点 - 使用消息...

    c#大一上学期书中的全部知识点

    在大一上学期的C#学习中,学生们将接触到一系列基础但至关重要的编程概念和语法。C#,作为微软开发的一种面向对象的编程语言,以其强大的功能和易读性深受开发者喜爱。以下是对标题和描述中提及的一些核心知识点的...

    pointString_点阵、字符_

    点阵字符是通过一系列点亮或熄灭的小点(像素)来表示字符的一种方式。每个字符由固定大小的矩阵组成,例如8x8或16x16的像素。每个像素可以是0(黑色/未点亮)或1(白色/点亮)。在C++中,我们可以使用二维数组来...

Global site tag (gtag.js) - Google Analytics