String s;和String s=null;和String s="a";有什么区别?

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()方法也不例外,而在方法之外编译器回自动赋初值。
 
时间: 2024-12-24 12:11:44

String s;和String s=null;和String s="a";有什么区别?的相关文章

c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.

c# 调用C++的dll报错 Attempted to read or write protected memory:   原因是:c# 传递Null的string值导致的,将Null改为string.empty即可

MSIL实用指南-加载null、string、long、float、double等值

本篇讲述怎么加载null.string值.long值.float值.double值. 加载null不需要参数值,只要 Emit ldnull 其它几个命令要 Emit <指令> <值> 加载null 加载null是很简单的,使用OpCodes.Ldnull,以下一句程序就可以了. ilGenerator.Emit(OpCodes.Ldnull); 加载string值 加载string值也很简单,使用OpCodes.Ldstr,格式是 ilGenerator.Emit(OpCodes

C# null,string.Empty,&quot;&quot;,DBNull 的区别

[null] null 在C# 中是一个关键字,表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 普通值类型不能为 null. null 在 VS 中定位不出来具体是怎么定义的.一般通过类名映射过来的关键字,都可以定位到声明位置.所以null是比较特殊的. 这个东西要跟踪源头还比较麻烦,感觉找不到具体定义. MSDN上说明很简单:null 关键字是表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 普通值类型不能为 null. stock overf

【java】Date与String之间的转换:java.text.SimpleDateFormat、public Date parse(String source) throws ParseException和public final String format(Date date)

1 package 日期日历类; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 public class TestDate { 8 public static void main(String[] args) { 9 Date date=new java.util.Date(); 10 System.out.println(date);/

android将String转化为MD5的方法+一些String常用的方法

public class StringUtils { public static String MD5Encode(String origin) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); resultString = byteArrayToHexString(md.digest(re

string 构造函数,=,整数 赋值给 string 引起的 坑

对string 理解构造和赋值理解不清引起的错误. 起因: string a; int i=1; a=i;//不报错,不警告 int c=330;//大于256 a=c;//不警告,不报错 a=330;//warning: overflow in implicit constant conversion string str=3;// error: invalid conversion from 'int' to 'const char*' string str(3);// error: inv

ExtJS学习-----------Ext.String,ExtJS对javascript中的String的扩展

关于ExtJS对javascript中的String的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以下对当中的部分方法进行介绍: (1)capitalize capitalize( String string ) : String 返回一个字符串.该字符串中第一个字母为大写字母 Parameters string : String 要转换的字符串 Returns String 转换后的字符串 (2

UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem L&gt;

L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/Others) Submit Status Have you ever been to London? Our Master Qiu will tell you how amazing in London and how funny a Ferris Wheel String is. One day

int、double、boolean、char、float、long、Object等七种数据类型转换成String数据类型 用到的方法是String.valueOf();

//int.double.boolean.char.float.long.Object类型数据转换成String //int类型转换成String类型 int h=123456; String l=String.valueOf(h); System.out.println("int类型转换成String类型:"+l); //double类型转String double a=1.1; String A=String.valueOf(a); System.out.println("