Java中创建String的两种方式差异

Posted 如若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中创建String的两种方式差异相关的知识,希望对你有一定的参考价值。

我们知道创建一个String类型的变量一般有以下两种方法:

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

那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?

方法1:

String a = "abcd";
String b = "abcd";

System.out.println(a == b);      // true
System.out.println(a.equals(b)); // true

解析:
用""创建的a,b两个字符串,==和equals比较返回都为true,这是因为a,b都指向了方法区的同一个字符串。所以,当同样的一个字符串用""重复创建时只在方法区创建一次。

方法2:

String c = new String("abcd");
String d = new String("abcd");

System.out.println(c == d);      // false
System.out.println(c.equals(d)); // true

解析:
用new创建的c,d两个字符串,equals为true很简单因为equals永远比较的是值,而==为false说明两个字符串的引用不一样。用new创建的字符串每次都会在JVM堆中创建,所以c,d都对应堆中的两个不同的字符串。
关于这两道题中的""和new创建的字符串在内存中的表现形式可以看下图就明白了。

 

以上是关于Java中创建String的两种方式差异的主要内容,如果未能解决你的问题,请参考以下文章

java并发传统线程技术中创建线程的两种方式

java 在Java中创建Fibonacci的两种方法

iOS中创建单例的两种方式

传统线程技术中创建线程的两种方式

并发技术01传统线程技术中创建线程的两种方式

在javascript中创建对象的两种方法