`

String类要点

 
阅读更多

1、考查"=="的结果

2、String的intern()函数的返回值

java 代码
  1. package com.test;   
  2.   
  3. public class StringTest {   
  4.   
  5.     public static void main(String[] args)   
  6.     {   
  7.         //有关字符串new 的解释:new String("abc"),首先会在String pool中查找值为"abc"的字符串,如果没有找到,则将在String pool中创建一个对象,然后在String堆中创建一个对象,此时,共产生了两个对象,分别指向不同的内存地址(String pool 和 String 堆)   
  8.         //如果在String pool中找到有"abc"这个值存在,则不会再在String pool中创建对象,而只在String堆中创建对象   
  9.         //此时s指向的是String堆中的对象,也就是String堆中的值为"abc"的对象的引用,s的值也就是String堆中的值为"abc"的对象的内存地址   
  10.         String s = new String("abc");   
  11.            
  12.         //s1指向的是String pool中值为"abc"的对象,s1的值也就是String pool中的值为"abc"的对象的内存地址   
  13.         //此时因为String pool中值为"abc"的对象已经在上面的String s = new String("abc");步骤中被创建了,所以此时并没有创建对象   
  14.         String s1 = "abc";   
  15.            
  16.         //s2指向的是在String堆中新创建的值为"abc"的对象   
  17.         //此时也就创建了一个对象(String堆中的值为"abc"的对象,因为String pool中值为"abc"的对象已经在上面的String s = new String("abc");步骤中被创建了)   
  18.         String s2 = new String("abc");   
  19.            
  20.            
  21.         //==比较的永远是两个对象的内存地址   
  22.         //s、s1、s2都指向的是不同的内存地址对应的对象   
  23.         System.out.println(s == s1);//false   
  24.         System.out.println(s == s2);//false   
  25.         System.out.println(s1 == s2);//false   
  26.            
  27.            
  28.         //String的intern()函数返回的是String pool中对应的对象   
  29.         //s.intern()返回的是String pool中值为"abc"的对象,而s是指向String堆中的值为"abc"的对象,所以他们的内存地址肯定不同   
  30.         System.out.println(s == s.intern());//false   
  31.         System.out.println(s1 == s1.intern());//true   
  32.         System.out.println(s.intern() == s2.intern());//true   
  33.            
  34.         String hello = "hello";   
  35.         String hel = "hel";   
  36.         String lo = "lo";   
  37.            
  38.         //原型字符串用"+"连接,过程是:字符串连接后("hello"),再去String pool中查找   
  39.         System.out.println(hello == "hel" + "lo");//true   
  40.         //原型字符串与字符串对象用"+"连接,过程是:字符串连接后("hello"),在String堆中创建一个新的对象,用于存放这个字符串   
  41.         System.out.println(hello == "hel" + lo);//false   
  42.            
  43.     }   
  44. }  
分享到:
评论

相关推荐

    自己参考些资料写的string类(简单的一个类,大家看看然后指点下)

    C++标准库提供了`std::string`类,但为了学习和理解面向对象编程,有时我们会尝试自己编写一个简单的`string`类。这里我们将讨论如何创建一个自定义的`string`类,以及可能涉及到的关键知识点。 首先,自定义`...

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

    在Java编程语言中,数据类型的比较与转换是基础但又至关重要的操作,尤其在处理文本与数字信息时。本文将深入探讨Java中String类型和int类型之间的比较方法以及...通过以上介绍,相信你已经掌握了这一技能的关键要点。

    C#Socket类学习要点

    ### C# Socket类学习要点 #### 一、Socket工作流程概览 Socket是网络编程的基础,它提供了在不同计算机之间进行通信的能力。本章节重点介绍面向连接的Socket工作流程,主要包括服务器端和客户端如何建立连接并进行...

    JAVA 程序员面试必备的32个要点

    - 实际上,`String`类有`length()`方法,用于获取字符串中字符的数量。 #### 14. 方法重载(Overloading)与重写(Overriding) - **Overloading**:在同一类中方法名称相同但参数列表不同的方法称为重载。 - **...

    Java软件开发实战 Java基础与案例开发详解 9-1 常用类介绍 共15页.pdf

    虽然`String`类提供了许多方法用于修改字符串的内容,但实际上这些方法都是生成新的字符串对象,原始字符串的内容不会被修改。 **9.1.3 字符串常量池** Java中存在一个字符串常量池。当程序中出现字符串常量时,...

    单例模式的要点及模式

    ### 一、单例模式的要点 1. **唯一实例**:在单例模式中,类的实例化过程被严格控制,确保任何时候都只有一个实例。这通常通过私有化构造函数来实现,防止外部直接创建对象。 2. **自行实例化**:单例类负责自己的...

    ASP.NET MVC3技术要点

    ### ASP.NET MVC3技术要点详解 #### 一、MVC3模板结构 MVC3提供了三种不同的项目模板供开发者选择,分别是Empty、Internet Application以及Intranet Application。这些模板覆盖了从空项目到完整的Web应用的不同...

    java面试要点集合

    3、String和StringBuffer区别 4、jsp有哪些动作标记 5、动态Include和静态Include的区别 6、Exception中Finally的用法 7、jsp的内置对象有哪些 北京环贸通科技有限公司 1、jsp两种跳转方式 2、struts标签库有哪些 ...

    Java程序员面试必备的31个要点

    ### Java程序员面试必备的31个要点详解 #### 第一,谈谈final, finally, finalize的区别。 - **final**: 在Java中,`final`关键字可以用来修饰变量、方法和类。当用于变量时,该变量一旦被初始化就不能再改变其值...

    c++基础要点

    - **字符串类型**:`string` 类是C++中的一个标准容器,用于处理字符串数据,提供了一系列方便的方法来操作字符串。 ### 2. 运算符 - **逻辑运算符**:`&&` 和 `||` 分别表示逻辑与和逻辑或,`==` 和 `!=` 用于...

    java程序员面试必备的32个要点

    尽管`String`类没有直接名为`length()`的方法,但其提供的`length()`方法可以返回字符串中字符的数量,实际上就是计算字符串的长度。需要注意的是,这里的长度是指字符串中字符的数量,并非数组的长度。 #### 14. ...

    javaSE整体学习总结,超级全面

    多态(polymorphism)的要点,多态的好处和弊端,抽象(abstract),抽象(abstract)类的使用要点,接口(interface),接口的一些方法,接口的扩展(概念),内部类的要点,数组的定义和本质,String类是什么,常用的方法,StringBuffer...

    提高C#编程水平的50个要点

    ### 提高C#编程水平的50个要点详解 #### 1. 总是用属性 (Property) 来代替可访问的数据成员 属性是C#中一种非常强大的特性,它允许程序员以一种更加面向对象的方式来封装类中的数据成员。通过使用属性而非公开的...

    core java要点总结

    ### Core Java 要点总结 #### 一、概述 Core Java 是 Java 技术的基础部分,涵盖了 Java 编程语言的基本概念和技术要点。对于初学者来说,掌握 Core Java 的核心概念是至关重要的,它为后续更高级的技术学习打下了...

    基于WinCE平台C#编程要点之四 by 英创信息技术有限公司.pdf

    ### 基于WinCE平台C#编程要点之四 #### 使用C#播放MP3或WAV音频文件 在嵌入式系统开发中,音频功能的集成是非常常见且重要的一个环节。英创信息技术有限公司提供了针对WinCE平台下C#语言编程的指导文档,其中包含...

    C++使用string的大数快速模幂运算(6)

    项目要点 1.大数指的是远超long long int的数据 2.将大数用矩阵进行存储,并通过矩阵实现运算 3.本人采用字符串进行存储,应注意char的特点 比如:char a=161;  cout<<(int)a; 此时会输出-95,而不是161,...

Global site tag (gtag.js) - Google Analytics