String s;和String s=null;和String s="a";有什么区别?
2024-10-16 20:23:06
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()方法也不例外,而在方法之外编译器回自动赋初值。
最新文章
- PL/SQL Developer不配置TNS直接登录
- 【转】EXCEL不显示科学计数法
- 简介Gulp, Grunt, Bower, 和 Npm 对Visual Studio的支持
- IIS7 应用程序池设置成 经典 v2.0
- hdu 2202 最大三角形 (凸包)
- Node.js 爬虫,自动化抓取文章标题和正文
- iOS单元测试1
- 【转】 iOS开发之打包上传到App Store——(一)各种证书的理解
- HDOJ(~1004)
- Kafka概述与设计原理
- Docker 三剑客之 Docker Swarm
- shell的变量处理
- datetimepicker 使用
- Daily Scrum - 12/15-21
- jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码
- Android 性能优化 SparseArray【转载】
- Layer文件上传操作
- Hbuilder用ajax连接eclipse中的servlet例子以及注意事项
- 四B象限图
- webpack查缺补漏