`

String类大总结

阅读更多
String 这个类非常特殊,下面是它的一些特点:
1、Sring类是final类型的,不能被继承。
2、例如:String str = "abc";//这样的语句生成的也是一个字符串对象,而这里却没有用new语句。
3、字符串String是常量,它们的对象被创建之后就是不能被改变的。
例如:
String s1 = "hello";
String s2 = " world";
String s3 = s1 + s2;
s1和s2对象生成之后就不能再被修改了,修改之后的字符串实际上都是生成了一个新的对象。s3也是生成的一个新的字符串对象,是把s1和s2里面的内容拼接到一块。
4、字符串支持使用“+”来连接多个字符串。实际上是生成了一个新的字符串对象,而不是在原有字符串的基础上追加内容。
5、java会维护着一个字符串池(String Pool,字符串池位于内存的栈中)【下面讲解String两种赋值方式的实际执行流程】:
a)、String s = “aaa”;(采用字面值方式赋值)
1) 查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个“aaa”对象,然后将String  Pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String Pool中的这个“aaa”字符串对象
2) 如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。
b)、String s = new String(“aaa”); (采用new方式创建对象)
1)  首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则不在Strng Pool中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。
2)  如果没有,则首先在String Pool中创建一个“aaa“对象,然后再在堆中(heap)创建一个”aaa“对象,然后将堆中的这个”aaa“对象的地址返回来,赋给s 引用,导致s指向了堆中所创建的这个”aaa“对象。


重点:栈和堆是计算机内存的两大主要区域,java中所有new出来的对象都位于堆中。


熟悉完以上知识之后重点查看以下代码,以及打印出来的每个结果:
package com.spring;

public class ObjectTest {
	public static void main(String[] args) {
		Object object = new Object();
		Object object2= new Object();
		System.out.println(object == object2);//false
		System.out.println("------------------------------");
		System.out.println(object.equals(object2));//false【调用的是Object类内部的equals()方法】
		System.out.println("-------------------------------");
		
		String str = new String("aaa");
		String str2 = new String("aaa");
		System.out.println(str == str2);//false
		System.out.println("-------------------------------");
		System.out.println(str.equals(str2));//true【调用的是String类内部的equals()方法,这个方法是从父类Object里重写过来的】
		System.out.println("-------------------------------");
		
		String str3 = "bbb";
		String str4 = "bbb";
		System.out.println(str3 == str4);//true
		System.out.println("-------------------------------");
		System.out.println(str3.equals(str4));//true【调用的是String类内部的equals()方法】
		System.out.println("-------------------------------");
		
		String str5 = new String("ccc");
		String str6 = "ccc";
		System.out.println(str5 == str6);//false
		System.out.println("---------------------------------");
		
		String s = "hello";
		String s1 = "hel";
		String s2 = "lo";
		System.out.println(s == s1 + s2);//false
		System.out.println("---------------------------------");
		System.out.println(s == "hel" + "lo");//true
	}
}



下面这些打印结果在找工作之前需要记忆
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) + " ");//other表示如果有其他类或包下面类里面也有一个字符串常量
                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());//不管是常量还是变量拼接,只要调用inter()方法,一定返回的是池中的引用,而hello指向的也是字符串池中的对象,因此相等
        }
}

打印结果:true true true true false true
分享到:
评论

相关推荐

    String类方法总结

    标题:“String类方法总结” 描述:“string类方法总结,由毕姥爷精心提炼,被誉为学习String类的必读经典。” **知识点详述:** 在Java编程语言中,`String`类是一个极其重要的类,用于处理文本数据。由于其不可...

    标准C++中的string类的用法总结

    ### 标准C++中的`string`类的用法总结 在C++编程语言中,`string`类是处理字符串的利器,它提供了丰富的功能,远远超过了传统的C风格字符串(即`char*`)。`string`类封装了字符串操作的所有细节,使得字符串处理变...

    java基础String类选择题练习题

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

    简单的string类

    总结起来,`std::string`是C++中处理字符串的重要工具,它提供了丰富的功能和便捷的API,使得字符串操作变得简单而高效。理解并熟练使用`std::string`,对提升编程能力大有裨益。在学习和实践中,我们应该不断探索其...

    string类的构造方法_String类重要吗_C++_STL_string_

    标题中的“string类的构造方法”揭示了我们要探讨的核心内容——如何初始化和创建`std::string`对象。`std::string`类不仅在日常编程中频繁使用,而且在很多高级功能如正则表达式、文本处理等方面都有重要应用,因此...

    C++ string 类 用法总结

    C++中的`std::string`类是处理字符串的利器,它提供了丰富的成员函数和操作,使得在C++中处理文本变得高效且易于管理。这里我们将深入探讨`std::...理解和熟练掌握`std::string`的用法,将极大提升代码的效率和可读性。

    C++中的string类

    ### C++中的string类 #### 引言 在C++编程语言中,`string`类是一种非常实用且功能强大的工具,它为处理文本数据提供了极大的便利。与传统的`char *`字符串相比,`string`类提供了更多的内置方法来简化字符串的...

    JAVA实验报告四(实现String类).doc

    Java 实验报告四(实现 String 类) 在本实验报告中,我们将实现 Java 中的 String 类,并了解其实现原理。 String 类是 Java 中一个非常重要的类,它提供了字符串操作的各种方法。在这里,我们将基于 ArrayList ...

    string 类及所有的方法(c++)

    总结来说,C++的string类提供了强大的字符串处理功能,其便利性体现在内存管理自动化、丰富的操作函数以及与C字符串的兼容性。在编程中,我们应该优先考虑使用string类来处理字符串,以提高代码的可读性和安全性。...

    C++重写String类

    一、为什么要重写String类? 1. **定制功能**:标准库的`std::string`可能不满足某些特定需求,如特定的内存管理策略、额外的成员函数或操作符重载。 2. **教学目的**:通过实现自己的字符串类,可以更好地理解字符...

    Java-String类的常用方法总结.pdf

    在这个总结中,我们将深入探讨String类的一些核心特性和方法。 首先,String类位于`java.lang`包中,这意味着它对所有Java程序都是自动导入的,无需额外引用。String类被声明为final,这意味着我们无法创建其子类,...

    C++string类型的使用总结

    本篇总结旨在详细介绍`string` 类的构造方法、常用操作方法及其功能特性。 #### 一、`string` 类对象的构造 `string` 类提供了多种构造方法来创建`string` 对象,每种构造方法都有其特定的用途: 1. **无参构造**...

    自己封装C++的String类

    这是我自己写的一个String类,当然也结合了网上好多文档,最终总结的。这个类在小项目中完全可以恰到好处了,但是如果是大型项目,请自己再修改下,或者添加其他的类。

    String类函数用法总结2.docx

    这篇文档总结了`std::string`类的一些主要功能和用法,包括构造函数、字符串比较、运算符重载、字符串赋值、字符串追加以及读取子串的方法。 首先,`std::string`的构造函数允许我们创建新的字符串对象。例如,`...

    Java中String类中的常用方法.TXT

    简单总结可以下Java中String类中的常用方法

    自己动手编写string类

    根据提供的文件信息,我们可以从中提取出以下知识点,有关C++中如何实现自定义的string类(MyString),以及相关的知识点: 1. **C++标准库string类**: - 标准库中的string实际上是一个typedef,它基于basic_...

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

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

    String容量大小区分

    根据提供的文件信息,本文将围绕“String容量大小区分”这一主题进行深入探讨,结合Java语言中的String类特性,解析字符串在不同场景下的容量变化及内存管理机制。 ### 标题和描述解读:“String容量大小区分” 该...

Global site tag (gtag.js) - Google Analytics