Java中的字符串是常量
Java中的字符串是常量
public class Stringtest {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "hello";
String s4 = "hello"+"world";
String s5 = "helloworld";
String s6 = s1 + s2;
//==号比较的是两个引用指向的地址是否相同,
//s1 == s3为true表明s1和s3这两个引用指向同一个地址,
//即String s1 = "hello"; 这条语句创建了"hello"常量,
//在String s3 = "hello"; 这条语句只是将s3指向了s1创建的"hello",而不是再创建一个"hello"。
System.out.println(s1 == s3); //运行结果:true
//同理,String s4 = "hello"+"world";这条语句拼接了一个"helloworld"常量,
//String s5 = "helloworld";这条语句直接把s5指向以上的"helloworld"常量,而不是再创建一个。
System.out.println(s4 == s5); //运行结果:true
//s6由s1和s2两个变量拼接而成,虽然结果也是"helloworld",但由于是由变量拼接而成,所以不会指向s4创建的"helloworld".而是创建一个新的"helloworld"并让s6指向它。
System.out.println(s5 == s6);//运行结果:false
}
}
s4和s6的不同:
编译器在编译的时候只能确定常量的值,所以String s4 = "hello"+"world";这条语句在编译的时候,由于编译起知道"hello"和”world“这两个常量的值,编译时就已经直接替代为了:String s4 = "helloworld";
而String s6 = s1 + s2;这条语句,因为s1、s2是变量,编译器无法确定变量的值(因为变量的值会变,编译起无法保证在运行过程中s1,s2的值恒定),这条语句在编译完成后并不做修改。所以会在运行的时候重新创建一个"helloworld"(与上面s4指向的"hellloworld”并不是同一个),并将s6指向它。
————————————————
版权声明:本文为CSDN博主「FakeMonk_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39108629/article/details/100178650
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现