(1)问题一:
null和""的区别
String s=null;
string.trim()就会抛出为空的exception 
String s=""; 
string.trim()就不会抛,

为什么?

答:
NULL:代表声明了一个空对象,不是一个字符串,可以赋给任何对象。  
""     :代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。

String s=null;  只是定义了一个句柄,即你有了个引用,但是这个引用未指向任何内存空间 
String s="";    这个引用已经指向了一块是空字符串的内存空间,是一个实际的东东了,所以你可以对它操作。

(2)问题二:

String s1;             //分配了一个内存空间,没存入任何对象 

String s2=null;   //null是未分配堆内存空间

String s3="a";   //分配了一个内存空间,存了一个字符串对象

out.println(s1);  //   出现异常

out.println(s2);  //    输出null

out.println(s3);  //    输出“a”

答:

主要要理解的是String s; s为一个引用~~它不是对象 
第一个是没有初始化的引用; 
第二个为空引用;
第三个是在字符串池里写入一个字符'a',然后用s指向它。
另外, 
String s="a"和String s=new String("a");是有本质上的区别的 :

(1)
前者是在字符串池里写入一个字符'a',然后用s指向它;
后者是在堆上创建一个内容为"a"的字符串对象。

(2)
String str="aaa"; //于栈上分配内存
String str=new String("aaa"); //于堆上分配内存

(3)问题三:
String a;

if(a=="")  //编译阶段即异常

String a = null;

if(a==null)  //返回true

答:
在实际处理时,往往认为""和null代表相同的含义,即都代表无值。 
此时建议用如下语法: 
if(a==null || a=="") 
{
}

这就是为什么验证用户名是否为空的时候,先写null在前,然后在判断"".

username!=null && !username.equals("");

如果为null,表示连内存空间都没有,就不用判断是否有空字符串了。这个顺序是不能交换的,否则会出现空指针的异常。
如果a为null,就不会执行后面的判断,直接返回true。

null:是用来判断引用类型是否分配了存储空间 
""  :是针对字符串的; 

下面说下:&&与&的区别:

&运算符有两种用法:按位与,和逻辑与

&&运算符是短路运算:即如果&&左边的表达式的值为false,则右边不用判断,即直接右边的表达式被短路掉了,不进行运算了。

用法:很多时候我们用的最多的是&&短路与。

另外注意:或运算:|与||也是这个区别。||这个运算符即表示左边的表达式正确了,右边的就不用判断了。

(4)问题四:

String s;在什么情况下可以等同于String s=null;而在什么情况下又不等同?
考虑下面的代码:

1 //StringTest.java
2 public class StringTest {
3
4 static String s;
5
6 public static void main(String[] args) {
7 System.out.println(s); //输出null
8 }
9 }

编译并运行上面的代码,将打印null。
s是自动初始化了的(s被自动初始化为null)。 
由此得出结论:
在成员变量的定义中,String s;等同于String s=null;
而在本地变量(方法变量)的定义中,String s;不等同于String s=null;,这时要使用s必须显式地赋值。
还有一点要说明的是:
只要是在方法在中定义变量都要显示赋初值,main()方法也不例外,而在方法之外编译器会自动赋初值。

java中的null和""区别------&&与&的区别的更多相关文章

  1. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  2. JAVA中局部变量 和 成员变量有哪些区别

    JAVA中局部变量 和 成员变量有哪些区别 1.定义的位置不一样<重点>***局部变量:在方法的内部成员变量:在方法的外部,直接写在类当中 2.作用范围不一样<重点>***局部 ...

  3. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  4. Java中Array与ArrayList的10个区别

    Array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用.并且ArrayList在内部由Array支持,了解Java中的Array和ArrayList之间的差异对于成为 ...

  5. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法   1.简单区别:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承.finally是异常处理语句结构 ...

  6. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...

  7. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  8. 转!!Java中关于Null的9个解释(Java Null详解)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  9. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...

  10. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

随机推荐

  1. Oracle同义词和序列

    同义词:是表.索引.视图的模式对象的一个别名,通过模式对象创建同意词,可以隐藏对象的实际名称和 所有者信息,为对象提供一定的安全性,开发应用程序时:应该尽量避免直接使用表,视图 或其他对象,改用对象的 ...

  2. CsvHelper文档-3写

    CsvHelper文档-3写 不用做任何设置,默认的情况下,csvhelper就可以很好的工作了.如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入: var record ...

  3. python怎么安装requests、beautifulsoup4等第三方库

    零基础学习python最大的难题之一就是安装所有需要的软件,下面来简单介绍一下如何安装用pip安装requests.beautifulsoup4等第三方库:   方法/步骤     点击开始,在运行里 ...

  4. USACO 1.4.2 Mother's Mil 母亲的牛奶(DFS)

    Description 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装 ...

  5. 1.2Linux下C语言开发基础(学习过程)

    ===============第二节  Linux下C语言开发基础=========== ********************** 重要知识点总结梳理********************* 一 ...

  6. Rsyslog初步学习

    一.Rsyslog整体架构 Rsyslog消息流:输入模块——>预处理模块——>主队列——>过滤模块——>执行队列——>输出模块 1. 输入模块 输入模块是消息来源 2. ...

  7. this & super

    /* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类.   this和super的用法很相似.   this:代表一个本类对象的引用. super:代表一个父 ...

  8. erlang init:stop()不起效

    http://blog.equanimity.nl/blog/2015/03/15/erlang-one-weird-trick-goodiebag/ http://erlang.org/piperm ...

  9. 【beta】Scrum站立会议第7次....11.9

    小组名称:nice! 组长:李权 成员:于淼  刘芳芳韩媛媛 宫丽君 项目内容:约跑app(约吧) 时间:2016.11.9    12:00——12:30 地点:传媒西楼220室 本次对beta阶段 ...

  10. idea导出包含main函数的jar

    1.首先打开File->project stucture->Artifacts 2.按照下图方式: 3.选择面main函数的所在的类,选择MAINFEST.MF问的生成路径 这里一定选择 ...