面试题详细解释,请移步到原文地址,字符串创建有两种方式,这两种方式有何区别是什么-尹白|尹白博客|Linux运维|Java开发|docker容器化技术实战
public class StringTest1 {
public static void main(String[] args) {
//=================题1:字符串创建有两种方式,这两种方式有何区别是什么????==============================
//方式1: 字面量赋值创建
String str1 = "inbai";
String str2 = "inbai";
String str3 = "net";
//这样创建字符串,首先会去常量池里找有没有这个字符串,有就直接指向常量池的该字符串,没有就先往常量池中添加一个,再指向它
//方式2: 用new创建
String str4 = new String("inbai");
String str5 = new String("inbai");
String str6 = new String("net");
//new一个字符串时,做了两件事:
// 第一件: 首先在堆中生成了该字符串对象,
// 第二件: 去看常量池中有没有该字符串,如果有就不管了,没有就往常量池中添加一个, 所以第二种方式,会创建更多的对象.
System.out.println( str1 == str2 ? "str1 和 str2 等" : "str1 和 str2 不等" ); //我们都在常量池,当然相等
System.out.println( str4 == str5 ? "str4 和 str5 等" : "str4 和 str5 不等" ); //我们存放的地址不同, 用 == 比较的是我们的地址
System.out.println( str4.equals(str5) ? "str4 和 str5 等" : "str4 和 str5 不等" ); //我们的值相同, 用 equals 比较的是我们的值
}
}
public class StringTest2 {
/**
* 原理分析:
*
*
* @param args
*/
public static void main(String[] args) {
// 请问下题中, str2 和 str3 是否是相等?
String str1 = "inbai";
String str2 = str1 + "net";
String str3 = "inbainet"; //创建的时候, 先看看常量池里有没有这么个字符串, 一看, 已经有了, 所以str3的地址,就指向常量池地址
System.out.println(str2== str3 ? "str2 和 str3相等" : "不等"); //因为我们都是来自String的常量池
}
}

本文详细探讨了Java中创建字符串的两种方式:字面量赋值和使用`new`关键字。字面量赋值会查找常量池,而`new`则会在堆中创建新对象,并可能在常量池中添加字符串。通过实例代码展示了`==`和`.equals()`的区别,以及字符串连接的优化机制。

被折叠的 条评论
为什么被折叠?



