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()方法也不例外,而在方法之外编译器回自动赋初值。
 

最新文章

  1. PL/SQL Developer不配置TNS直接登录
  2. 【转】EXCEL不显示科学计数法
  3. 简介Gulp, Grunt, Bower, 和 Npm 对Visual Studio的支持
  4. IIS7 应用程序池设置成 经典 v2.0
  5. hdu 2202 最大三角形 (凸包)
  6. Node.js 爬虫,自动化抓取文章标题和正文
  7. iOS单元测试1
  8. 【转】 iOS开发之打包上传到App Store——(一)各种证书的理解
  9. HDOJ(~1004)
  10. Kafka概述与设计原理
  11. Docker 三剑客之 Docker Swarm
  12. shell的变量处理
  13. datetimepicker 使用
  14. Daily Scrum - 12/15-21
  15. jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码
  16. Android 性能优化 SparseArray【转载】
  17. Layer文件上传操作
  18. Hbuilder用ajax连接eclipse中的servlet例子以及注意事项
  19. 四B象限图
  20. webpack查缺补漏

热门文章

  1. 为什么写《Tomcat内核设计剖析》
  2. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)
  3. 跟踪Makefile输出调试信息
  4. vue-router(一)
  5. 【剑指offer】找出数组中任意重复的数字(不修改数组),C++实现
  6. 【集成学习】lightgbm调参案例
  7. [QT]数据库SQLITE使用错误记录
  8. phpcms sitemaps修改
  9. MySQL 5.6.30 升级到5.7.10
  10. HDU1671 水题字典树