java 空字符串与null区别

转自:http://liucun.iteye.com/blog/801691

" "分配了内存
;null没有 
调用null的字符串的方法会抛空指针异常。 
""是一个字符串(String).它在内存中是存在的.它可以使用Object对象中的方法(如"".toString();"".equals()) 
而null它是一个空对象.在内存中是不存在的.它不可以使用Object对象中的方法 
""占内存..
在内存中会分配一个空间. 
null不占内存.
为空引用. 
String str1 = null;
str引用为空 
String str2 = "";
str应用一个空串 
也就是null没有分配空间,""分配了空间,因此str1还不是一个实例化的对象,儿str2已经实例化。 
注意因为null不是对象,""是对象。所以比较的时候必须是
if(str1==null){....}和if(str2.equals("")){} 
对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误: 
if(str1.equals("")||str1==null){//如果str1没有值,则.... 
//。。。。 

正确的写法是
if(str1==null||str1.equals("")){
//先判断是不是对象,如果是,再判断是不是空字符串 
//... 


补充: 
Java里面,类的对象都是用句柄来访问的,就像C里面的指针。 
而在Java里面有两个比较相等的方法一个是用“==”,另一个是String
里面的equals()方法,两个的区别是,前者比较的是地址,后者比较的
是内容。 
例如你写了这样的一个语句 
String
str1,str2; 
那就是定义了两个指向不同String实例的句柄,现在他们都是指向null
的所以str1==str2==null,此时你不能用length()方法,因为,他们
都没有指向具体的对象,如果调用这个方法的话,会返回一个 NullPointerException。 之后,如果你写了这样的语句
str1=new String(); 那么str1将指向一个具体的String实例,所以str1!=str2,str1!=null,
而且更重要的是str1!="",因为""与str1所指的是两个不同的地址。
但方法str1.length()的返回值就是0了,也就是字符串为空。
同样即使你再这样写 
str2=new String();
这个时候依然是str1!=str2,因为他们指向的是两个不同的地址,
但如果你用str1.equals(str2)的话,返回值就是true,因为他们的内 容相同,都为空。

时间: 2024-10-27 14:22:44

java 空字符串与null区别的相关文章

解决CsvWriter:中文乱码、末尾行多一行空格(/r)、非第一列空字符串""显示null问题

一:主要内容 解决CsvWriter存csv,csv文件打开后中文乱码问题 解决CsvWriter存csv,csv文件最后一行总是多一行空行的问题 解决CsvWriter存csv,csv文件不是第一列的时候,想存入""即空字符串无法存入显示null的问题 二:解决问题前:需要做的事情 因为网上的CsvWrite的jar包导入到我们的工程中是class文件,针对上面的问题是无法修改源码的,但是我们又想用这个工具来操作csv,所以可以在自己的工程中首先pom引用这个jar包 <dep

Oracle坑之-空字符串与NULL

空字符串与NULL 首先有如下代码 SELECT * FROM Pdc_DataDomain DD INNER JOIN Pdc_DD_Table DDT ON DD.DataDomainID = DDT.DataDomainID AND DD.ApplicationDBID = '3e7c6764d73f4c7786c99e5b72eb6912' AND DDT.TableName <> '#' AND NOT EXISTS (SELECT * FROM pdc_Application_3e

Access空字符串和Null值

什么是空字符串和Null值: Microsoft Access可以区分两种类型的空值.因为在某些情况下,字段为空,可能是因为信息目前无法获得,或者字段不适用于某一特定的记录.例如,表中有一个“电话号码”字段,将其保留为空白,可能是因为不知道顾客的电话号码,或者该顾客没有电话号码.在这种情况下,使字段保留为空或输入Null值,意味着“不知道”.双引号内为空字符串则意味着“知道没有值”.采用字段的“必填字段”和“允许空字符串”属性的不同设置组合,可以控制空白字段的处理.“允许空字符串”属性只能用于“

Java 空字符串和 字符串为null的区别

之前一直没有搞清楚 字符串为空和字符串为null的区别,今天写代码一直出现NullPointerException异常,我一直没有搞清楚,后来发现我是这样写的 String s = null; s = xxx.getString(); if (!s.isEmpty() && s != null) { System.out.println("ok"); } 我看了半天也没有看懂(拒绝嘲讽). 所以我看着别人的博文,写一篇作笔记 1. 不同之处 null表示一个字符串对象的

空字符串(“”)和null和空格字符串(&quot; &quot;)的区别

1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符串.例如声明一个字符串String str = “” ; 2.内存分配String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间:String str = “”; 表示声明一个字符串类型的引用,其值为""空字符串,这个str引用

空字符串(“”)和null的区别

1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也就是说它的长度为0.例如声明一个字符串String str = "" ; 2.内存分配String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间:String str = "";    表示声明一个字符串类型的引用,其值为""

区分空字符串和null

核心思想: string.Empty等价于 ""  ,但是和null的意义完全不同! string str = null; 这条语句只是在栈中分配了一个string引用,但是并没有在堆中分配任何东西:string.Length是错误的!它并没有所谓的长度,抛出NullReferenceException; string str = ""; 这条语句等效于 string str = string.Empty;   这条语句在堆中也分配了一些东西,只不过str引用指向的

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"

Oracle中Null与空字符串&#39; &#39;的区别

含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1.主键字段(primary key), 2.定义时已经加了NOT NULL限制条件的字段 说明: 1.等价于没有任何值.是未知数. 2.NULL与0.空字符串.空格都不同. 3.对空值做加.减.乘.除等运算操作,结果仍为空. 4.NULL的处理使用NVL函数. 5.比较时使用关键