`

String 字符串内存比较

 
阅读更多

public class Test{
public static void main(String[] args){
  String S1=new String("abc");
  String S2="abc";
  String S3="abc";
  String S4=new String("abc");
  System.out.println(S1==S2);
  System.out.println(S2==S4);
  System.out.println(S2==S3);
  System.out.println(S1==S4);
}
}

运行的结果是:
false
false
true
false

 

原因的解释:

 

字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把神马样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
而String中的equls方法已经做了处理,他是比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它。

 

 

分享到:
评论

相关推荐

    java字符串内存计算

    \[ \text{字符串内存占用} = \text{String类头大小} + \text{字符数组占用空间} \] 其中,String类头大小固定为24字节。而字符数组占用空间的计算则稍微复杂一些。根据字符串长度的不同,其占用空间有所不同。具体...

    C++实现的String字符串类

    在这个“C++实现的String字符串类”中,我们将探讨类的设计、重载操作符、内存管理以及类的组合。 首先,一个自定义的`String`类通常会包含以下几个核心部分: 1. **数据成员**:存储字符串的实际字符序列,通常是...

    C语言实现String字符串及其函数stringUtil

    在C语言中,String字符串是字符数组的一种表现形式,它以空字符'\0'作为结束标志。本项目名为"C语言实现String字符串及其函数stringUtil",主要关注的是如何在C语言环境中自定义处理字符串的函数,以扩展标准库中...

    String 字符串讲解

    - `compareTo(String)`根据字典顺序比较字符串,返回值为整数,表示当前字符串与另一个字符串的相对顺序。 - `compareToIgnoreCase(String)`同样进行比较,但忽略大小写。 9. **字符串操作方法**: - `substring...

    java的String字符串补0

    ### Java的String字符串补0技术解析 #### 一、引言 在Java编程中,对字符串进行特定格式化的处理是一项常见的需求。其中,“补0”操作尤其常见于日期时间格式化、编号序列化等场景中。例如,在处理数据库查询结果时...

    用c++比较两个字符串的大小

    - 可以考虑使用`std::string`类替代字符数组,这样可以避免硬编码字符串最大长度,并提供更丰富的字符串操作方法。 - 使用`strcmp`函数可以简化字符串比较的过程。 #### 总结 通过本文的学习,我们了解到如何...

    C++自定义string字符串类

    在C++编程中,`std::string`是一个非常重要的类,用于处理文本字符串。然而,有时为了特定的需求或教学目的,我们可能需要自定义一个类似于`std::string`的字符串类。这个自定义的字符串类,如文件名所示的`MyString...

    String字符串比较1

    Java中的字符串操作是一个重要的知识点,尤其在内存管理和字符串比较方面。在Java中,字符串是不可变的,这意味着一旦创建,就不能更改。字符串的比较通常涉及到`==`和`.equals()`方法,以及`intern()`方法。 首先...

    字符串数组转换成string类型的

    在处理大量数据时,可能需要考虑内存效率和性能优化,例如使用`StringBuilder`而非多次使用`+`操作符(在某些语言中,这会导致不必要的字符串拷贝)。 此外,对于跨语言交互或底层系统编程,可能还会涉及到字符编码...

    如何将xml的String字符串转化标准格式的String字符串(jdom)

    // 使用StringReader将XML字符串作为输入 StringReader inputReader = new StringReader(xml); // 解析XML字符串并创建Document对象 Document document = saxBuilder.build(inputReader); // 创建...

    string字符串解释

    标题中的“string字符串解释”指的是在编程语言中对字符串数据类型的深入理解和应用。字符串是编程中常见的一种数据结构,用于存储和操作文本信息。在不同的编程语言中,字符串的实现和处理方式略有不同,但其核心...

    Java程序设计基础:创建String字符串.pptx

    创建String字符串 目录 课程导入 掌握String字符串对象的创建 掌握字符串对象的输入与输出 一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用...

    关于字符串相等的比较

    只有当两个字符串指向同一个内存地址时才为真,这在大多数情况下并不是我们想要的结果。 #### 其他高级技巧 - **使用 `StringBuilder` 或 `StringBuffer`:** - 当需要构建或修改字符串时,使用 `StringBuilder`...

    字符串比对String Compare.rar

    值比较(如`==`或`.Equals()`)关注的是两个字符串的内容是否相同,而引用比较(如`object.ReferenceEquals()`)则检查它们是否指向内存中的同一位置。 3. **忽略大小写比对**:在某些场景下,我们可能不关心字符串...

    Delphi字符串快速替换函数,速度超快 秒杀自带的StringReplace函数

    1. **使用原地替换**:如果可能,尝试在原始字符串上进行替换,而不是创建新的字符串对象,这可以减少内存分配和拷贝的开销。 2. **缓存查找模式**:对查找模式进行预处理,生成查找表,以便快速确定下一个可能的...

    C++ STL string类 字符串处理函数 第二版

    5. **比较**:`compare(const string&)`或`compare(const char*)`进行字符串比较,可以按字典顺序比较整个字符串或子字符串。 6. **操作符**:`+`用于连接两个字符串,`+=`将字符串追加到已有字符串,`=+`等同于`+=...

    Arduino 分割字符串库,strFenGe.rar

    然而,`String` 类在内存管理上存在一些限制,尤其是在处理大量字符串操作时可能导致内存碎片。 2. **字符串分割**: 在 C/C++ 标准库中,没有内建的函数可以直接根据分隔符分割字符串。但在 Arduino 中,我们可以...

    c字符串,string对象,字符串字面值的区别详解

    总结来说,C字符串是原始的字符数组,需要谨慎处理内存和边界,字符串字面值是不可变的,而`std::string`对象提供了丰富的接口和安全保障,更适用于现代C++编程。在选择使用哪种字符串类型时,应考虑其特性和应用...

    string字符串处理.docx

    `string.h`库提供了多种处理C风格字符串的函数,这些函数对于内存管理、字符串拷贝、拼接以及比较等操作非常有用。以下是一些重要的字符串处理函数的详细说明: 1. **strdup**: - 函数原型:`char *strdup(const ...

Global site tag (gtag.js) - Google Analytics