String s String s=null和String s="a"区别

原文链接:https://www.cnblogs.com/ipetergo/p/6826909.html
String s;和String s=null;和String s="a";有什么区别?  

针对这三种情况,使用out.println(s);的时候,第一个会出现异常,第二个会输出null.第三个则会输出a.  
 这是为什么呢?这三句声明语句,各自作了什么呢? 

答:
第一个只是定义了一个String类型变量s,并没有给它赋初值,在Java中,默认在使用一个变量的时候必须赋予它初值(降低风险)。 第二个和第三个都定义了String类型变量s,并赋予它初值,只不过第二个赋予的值为null(空)罢了

主要要理解的是String s; s为一个引用~~它不是对象   第一个是没有初始化的引用;   第二个为空引用;
第三个是在字符串池里写入一个字符'a',然后用s指向它。
另外,   String s="a"String s=new String("a");是有本质上的区别的   前者是在字符串池里写入一个字符'a',然后用s指向它;
后者是在堆上创建一个内容为"a"的字符串对象。
String str="aaa"; //于栈上分配内存
String str=new String("aaa"); //于堆上分配内存

String s; 系统会自动赋值null

String s;只是给s分配一个内存空间   String s=null;是分配的空间中存储的值为空值   String s="a";这句就不用我多说了分配的空间的值为字符a


延伸补充:
在成员变量的定义中,String s;等同于String s=null;
而在本地变量(方法变量)的定义中,String s;不等同于String s=null;,这时要使用s必须显式地赋值。
这些虽然是小知识点,但在实际应用中很重要,也很容易被一些人忽视,特此提出。
还有一点要说明的是:
只要是在方法在中定义变量都要显示赋初值,main()方法也不例外,而在方法之外编译器回自动赋初值。
posted @   枫树湾河桥  阅读(349)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
Live2D
欢迎阅读『String s String s=null和String s="a"区别』
哥伦布
14:09发布
哥伦布
14:09发布
7°
南风
3级
空气质量
相对湿度
40%
今天
中雨
3°/15°
周三
中雨
3°/14°
周四
小雪
-1°/6°
点击右上角即可分享
微信分享提示