`

String对象声明与使用解析

 
阅读更多

首先应该了解对象的比较:

有两种方式可用于对象间的比较,它们是“= =”运算符与equals()方法,“= =”操作符用于比较两个对象的内存地址值是否相等,equals()方法用于比较两个对象的内容是否一致。

 

下面两种关于String对象的声明方式的不同:

String str1 = new String("java");
String str2 = "java";

 先看一下范例:

public class StringDemo {
	public static void main(String[] args) {
		String str1 = "java";
		String str2 = new String("java");
		String str3 = "java";
		System.out.println("str1 == str2 ? --- > " + (str1 == str2));
		System.out.println("str1 == str3 ? --- > " + (str1 == str3));
		System.out.println("str3 == str2 ? --- > " + (str3 == str2));
	}
}

 

输出结果:

str1 == str2 ? --- > false

str1 == str3 ? --- > true

str3 == str2 ? --- > false

 

       由程序输出结果可以发现,str1与str3相等。“==”是用来比较内存地址值的。现在str1与str3相等,则证明str1与str3是指向同一个内存空间的。


       由图中可以看出“java”这个字符串在内存中开辟的一个空间,而str1与str3又同时指向同一内存空间,所以即使str1与str3虽然是分两次声明的,但最终却都指向了同一内存空间。而str2是用new关键字来开辟的空间,所以单独占有自己的一个内存空间。

      String对象的内容一旦声明则不能轻易改变。如果想改变一个String对象的值,则第一步要做的是先将原有的String引用断开,之后再开辟新的内存空间,而且如果用new关键字开辟String对象的内存空间的话,则实际上就开辟了两个内存空间,如下图:

 


 

(A)中不难发现,String对象一旦声明则不能轻易改变,如果要改变则需要先断开原有的对象引用,再开辟新的对象,之后再指向新的对象空间。

(B)的方法也可以实现改变String对象的声明的操作,可以发现,用new String(“java”)方式实例化String对象时,实际上是开辟了两个内存空间,所以一般在开发上都采用直接赋值的方式,即:String str1 = "java"。
 

 

分享到:
评论

相关推荐

    JNI处理hashmap,string等对象的操作

    对于String对象的处理,JNI提供了`NewStringUTF`函数来创建一个新的Java String对象,以及`GetStringUTFChars`和`ReleaseStringUTFChars`来获取和释放字符串的UTF-8表示。例如,你可能需要在本地代码中解析或修改...

    String和string区别以及string详解.doc

    标题与描述中提到的知识点是关于C#编程语言中`String`与`string`的区别,以及`string`类型的深入解析。以下是对这些知识点的详细解释: ### `String`与`string`的区别 #### 1. **位置与来源** - `String`是.NET ...

    jsp隐含对象详细解析

    在JSP开发中,有一些内置的对象(也称为隐含对象或隐藏对象),这些对象无需显式声明即可直接使用。这些内置对象极大地简化了JSP页面的编写,并提供了丰富的功能支持。 #### 二、内置对象介绍 JSP内置对象是预定义...

    JavaScript中函数与对象的解析.pdf

    JavaScript 中函数与对象的解析 JavaScript 中的函数与对象是掌握 JavaScript 语 言的基础。JavaScript 语 言与 C++、Java 等语 言在语法上类似,但其函数具有独特性。本文将深入了解 JavaScript 语言中的函数与...

    jsp内置对象解析

    在JSP中,内置对象是其核心特性之一,由JSP容器自动提供,无需显式声明即可使用。这些内置对象简化了开发者处理HTTP请求、响应以及页面控制的复杂性,使开发过程更为高效。 #### 内置对象概览 在JSP 2.0规范中定义...

    简单的string类

    在编程世界中,字符串是数据处理的核心部分,无论是读取用户输入、解析文件还是网络通信,我们都会频繁地与字符串打交道。C++标准库中的`std::string`类是处理字符串的重要工具,它提供了丰富的功能,让程序员可以...

    Unity 解析 json工具 -简单好用。不需要在声明 许多类(结构体)和对应字段。

    这种方式非常便捷,但限制在于JSON结构必须与C#对象的结构完全匹配,包括字段的顺序和类型。 然而,描述中提到的可能不止于JsonUtility,比如可能是第三方的JSON解析库,如Newtonsoft.Json(Json.NET)。这个库...

    Java中关于String的全面解析

    String类中声明了一个char[]数组,变量名value,声明了一个int类型的变量hash(该String对象的哈希值的缓存)。也就是说java中的String类其实就是对char数组的封装。 String类的构造方法 构造方法接下来我们通过一...

    类对象的创建及内存解析

    在Java编程语言中,类对象的创建和内存解析是理解面向对象编程的关键概念。当我们谈论“类对象”时,我们实际上是指类的实例,也就是常说的对象。这些对象是通过类的构造器创建的,而类则定义了对象的属性(字段)和...

    使用dom解析某个固定XML

    2. **读取XML文件**:使用`File`对象表示XML文件路径,然后通过`DocumentBuilder`的`parse()`方法解析文件: ```java File inputFile = new File("path_to_your_xml_file.xml"); DocumentBuilder builder = ...

    (Java)json和String互转必备Jar包

    JSON格式通常用于Web服务与客户端之间的数据传输,因为它的结构清晰,易于解析。然而,Java原生并不支持直接将JSON字符串与Java对象进行转换,因此我们需要依赖第三方库来实现这一功能。本资源提供的"(Java)json和...

    前端开源库-astring

    使用astring,开发者可以创建一个AST对象,这个对象描述了想要生成的JavaScript代码结构。astring库提供了API接口,用于根据AST生成源代码。这些API通常包括`generate`方法,接收一个AST对象并返回生成的字符串。...

    json 的解析demo

    - **JSONObject**:如果JSON数据是一个对象,可以使用`JSONObject`类来解析。例如,`JSONObject obj = new JSONObject(jsonString);`,然后通过`get()`方法获取键对应的值。 - **JSONArray**:对于JSON数组,使用`...

    我学院JAVA的面向对象编程知识点解析.doc

    面向对象编程(OOP)与面向过程编程的主要区别在于,面向过程是以步骤和函数为中心,而面向对象则是以对象为中心。在面向对象中,我们首先定义类,类是对一类对象的抽象,它描述了对象的属性和行为。然后,我们通过...

    Sql Server解析Json

    - **@Type**: 表示当前解析到的对象类型(数组或对象)。 - **@Contents**: 未解析的括号内内容。 - **@Start, @End**: 当前正在解析的标记的起始和结束索引。 - **@param, @EndOfName**: 用于处理对象/数组标记的...

    Java string不可变原理实例解析

    Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能改变它的内容。这个特性是由几个关键的设计决策和语言特性共同决定的。首先,String类被声明为final,这防止了其他类对其进行子类化并改变其...

    SAX解析XML实例

    与DOM(Document Object Model)解析器不同,SAX并不将整个XML文档加载到内存中形成一个树形结构,而是逐行读取文档,遇到元素、属性等事件时触发相应的回调函数。这种方式对于处理大型XML文档非常有效,因为它节省...

    Java String 对象(你真的了解了吗)

    Java中的String对象是编程中非常基础且重要的概念,它的特性、创建方式以及不可变性都是开发者需要深入理解的关键点。本文将详细解析这些知识点。 首先,让我们来看看String对象的实现历史演变: 1. 在Java 6及...

    JAVA中StringBuffer与String的区别解析

    因此,对于任何试图修改String对象的操作,如添加、删除或替换字符,Java都会创建一个新的String对象来保存修改后的结果。这种不可变性虽然确保了线程安全,但也会导致性能问题,特别是在频繁修改字符串内容的场合,...

    关于解析xml的一些demo

    在本文中,我们将深入探讨XML的基本概念、解析XML的方法以及如何使用示例代码进行操作。 XML的设计目标是传输和存储数据,而不是显示数据,这与HTML的主要区别在于HTML主要用于网页展示。XML文档由元素、属性、文本...

Global site tag (gtag.js) - Google Analytics