更新时间:2020-06-19 13:48:02 来源:极悦 浏览3396次
Java中的字符串类String是程序中使用十分频繁而且在各大公司招聘笔试中必考的知识点之一。本文主要String的用法进行分析。
用String来定义一个字符串一般有两种方法:
1.String str=”hello world”;,2.String str=new String(“hello world”);
第一种方式:String str=”hello world”,生成的str是一个字符串常量。放在常量池中,所谓的常量池,是指给每个class类编译时分配的用来保存class中的常量值,或者常量字符串的一个区域。对于每一个字符串在常量池中只保留一个值,每次用第一种方式定义一个字符串时,jvm就会在常量池中找有没有相同的字符串,有就返回一个该字符串的地址,如果没有在常量池中生成该字符串。举个例子:
定义String str=”helloworld”时jvm会先在常量池中找有没有常量“helloworld”,因为我们是第一次定义因此并没有“helloworld”,此时jvm会在常量池中给“helloworld”分配一个地址,并且在栈中给str分配地址;如下图
先在在定义一个String str1=“helloworld”,此时jvm会先在常量池中找看有没有常量值等于“helloworld”的找到了之后直接在栈中为str1分配一个地址,然后让str1引用常量池中的“helloworld”,此时不再生成“helloworld”如下图:
也就是说用第一种方法定义n个相同的字符串,它们都是指向常量池中的同一个常量。
用第二种方式:String str=new(“hello world”);是生成一个字符串对象,该对象存放在堆内存中,当用第二种方法生成多个相同字符串的对象时,便会在堆中生成多个字符串对象。如下:
最后我们用程序来检验一下看看方法一和方法二生成字符串的区别:
在检验之前我们先对字符串中的两种常用的比较方法进行说明:str==str1,与str.equals(str1)的区别,str==str1是比较两个字符串是否指向的是同一个实体,或者说是不是对同一个实体的引用,str.equals(str1),则仅仅是比较两个字符串是否相同而不管他们是不是对同一个实体的引用。
public class StringTest {
public static void main(String[] args) {
String str="helloworld";
String str1="helloworld";
String str2=new String("helloworld");
String str3=new String("helloworld");
System.out.println(":"+(str==str1));
System.out.println(":"+(str1==str2));
System.out.println(":"+(str2==str3));
System.out.println(":"+str.equals(str3));
}
}
输出的结果如下:
:true
:false
:false
:true
由此可知str与str1是引用的同一实体,而str2与str3引用的是不同实体。且str指向的字符串值与str3相同。
以上就是极悦java培训机构的小编针对“java string 字符类型定义的两种方法”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习