字符串常用方法
字符串定义的两种方式
String str = "123";//直接在常量池中开辟一个空间,并将这个对象的地址给str
String str1 = new String("123");//它相当于new了两个对象,一个在堆中,一个在常量池中
两种创建字符串的区别
package Stringdemo;
public class Demo01 {
public static void main(String[] args) {
String str = "123";
String str1 = "123456";//相当于在方法区常量池中开辟了一个空间,存放着123对象
String str3 = str+"456";
String str4 = "123"+"456";
System.out.println(str3 == str1);//false
System.out.println(str3 == str4);//false
System.out.println(str1 == str4);//true
System.out.println(str3.intern() == str4);//true
}
}
输出:
false
false
true
true
//结论:
在常量池中只能允许有一个对象存在
如果有变量进行字符串的拼接的时候,相当于在堆中new出一个对象
当字符串使用intern()方法的时候,就会返回其在常量池的地址
补充:当字符串定义为final之后,就变成了常量,就在常量池中,再进行拼接的时候也是在常量池中进行
public class Demo3 {
public static void main(String[] args) {
String str = "123456";
final String str1 = "123";
String str2 = str1 + "456";
System.out.println(str2 == str);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理