`

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"。
 

 

分享到:
评论

相关推荐

    spring源代码解析

    对于一个Spring激活的web应用程序,可以通过使用Spring代码声明式的指定在web应用程序启动时载入应用程序上下文(WebApplicationContext),Spring的ContextLoader是提供这样性能的类,我们可以使用 ...

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    2Java SE(上).doc

    首先该方法会使用给定的字符串与当前字符串进行全匹配,当找到位置后,会将给 定字符串中第一个字符在当前字符串中的位置返回。常用来查找关键字使用。 重载方法: int lastIndexOf(String str):返回给定的...

    Oracle解析复杂json的方法实例详解

     当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析。如此一来导致即便可以在PL/SQL中调用远程接口...

    超级有影响力霸气的Java面试题大全文档

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 12、...

    type-graphql:使用TypeScript使用类和装饰器创建GraphQL模式和解析器!

    使用类和装饰器,使用TypeScript创建GraphQL模式和解析器! 介绍 TypeGraphQL使开发GraphQL API成为一个令人愉快的过程,即通过仅使用类和一些装饰器魔术来定义架构。 因此,要创建对象类型或输入类型之类的类型,...

    Android中Java instanceof关键字全面解析

    instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。... 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Obje

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Javascript笔记一 js以及json基础使用说明.docx

    对象可以使用var关键字来声明,并可以添加属性和方法。例如,创建一个对象并设置属性及初始值:var person = {name: "Angel", age: 18, married: false};创建一个对象并设置属性和方法:var speaker = {text: "Hello...

    Java开发技术大全 电子版

    3.3成员变量的定义与使用109 3.3.1成员变量的定义109 3.3.2成员变量的访问权限110 3.3.3实例成员变量和静态成员变量114 3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2创建方法体与return语句117 3.4.3...

    Objective-c对象组装XML

    2 调用封装,声明对象名称及XML模板,组装器会根据XML模板填充数据。 XmlPackage *xmlPackage = [[XmlPackage alloc]init]; NSData *data = [xmlPackage objctPackage:map objectName:@"book1" xmlTemplateName:...

    java 面试题 总结

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...

    泛型需要注意的问题Java系列2021.pdf

    在这种情况下,如果我们使用`arrayList1`引用来get值时,返回的都是`String`类型的对象,但实际上已经被存放了`Object`类型的对象,这样就会有`ClassCastException`。 二、泛型类型变量不能是基本数据类型 泛型...

    rstruct:一个以类似于c结构的方式使用Ruby二进制结构的库

    例如,您可能不希望使用与String对象相同的接口来在IO对象上构建或解析结构。 换句话说,拥有可以轻松地与流式IO和缓冲区一起使用的东西很好。 之所以写Rstruct是因为作者希望获得与C结构相当的东西,而无需在解析...

    全面解析C++中的析构函数

    例如,声明 String 类的析构函数:~String()。 在 /clr 编译中,析构函数在释放托管和非托管资源方面发挥了特殊作用。 析构函数通常用于在不再需要某个对象时“清理”此对象。请考虑 String 类的以下声明: // ...

    xml与反射.txt

    3 使用过哪些xml解析 XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。 XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。 XML的解析...

    JavaScript王者归来part.1 总数2

     7.5.5 特殊的对象--全局对象与调用对象   7.6 总结   第8章 集合  8.1 数组和数组元素   8.1.1 数组的构造   8.1.2 数组常量   8.1.3 数组元素   8.2 数组对象和方法   8.2.1 查找元素   8.2.2 ...

    HTTP网络请求框架

    文本请求可传入解析的泛型clazz,即可返回解析后的clazz对象进行数据 操作,如果不需要进行数据解析,可通过另一种方式获取原生的string; 单图请求,单图请求可执行对本地asset文件夹,sd卡,http三种请求模式.只需传入...

    多功能.NET代码自动生成器2.0版(2010年最新修改)

    解析业务实体对象为json数据源。 public string GetJsonByList(List<CalendarNotesModel> list) 解析List数据集合为json数据源,json数据源记录总条数即为List集合的元素个数。 public string GetJsonByList(List...

    多功能.NET代码自动生成器(含存储过程)

    解析业务实体对象为json数据源。 public string GetJsonByList(List<CalendarNotesModel> list) 解析List数据集合为json数据源,json数据源记录总条数即为List集合的元素个数。 public string GetJsonByList(List...

Global site tag (gtag.js) - Google Analytics