java中的null和""区别------&&与&的区别
(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和""区别------&&与&的区别的更多相关文章
- JAVA中String = null 与 String = "" 的区别
JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...
- JAVA中局部变量 和 成员变量有哪些区别
JAVA中局部变量 和 成员变量有哪些区别 1.定义的位置不一样<重点>***局部变量:在方法的内部成员变量:在方法的外部,直接写在类当中 2.作用范围不一样<重点>***局部 ...
- 【转】彻底弄懂Java中的equals()方法以及与"=="的区别
彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...
- Java中Array与ArrayList的10个区别
Array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用.并且ArrayList在内部由Array支持,了解Java中的Array和ArrayList之间的差异对于成为 ...
- 转 Java中final、finally、finalize的区别与用法
Java中final.finally.finalize的区别与用法 1.简单区别:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承.finally是异常处理语句结构 ...
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- Java中public,private,protected,和默认的区别
Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...
- 转!!Java中关于Null的9个解释(Java Null详解)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...
- 关于Java中的Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
随机推荐
- 从零开始的Python学习Episode 8——深浅拷贝
深浅拷贝 一.浅拷贝 列表中存储的是数据的内存地址,当我们要查询或修改列表中的数据时,我们是通过列表中的地址找到要访问的内存.当我们修改列表中的数据时,如果修改的是一个不可变类型(整型,长整型,浮点数 ...
- 微软职位内部推荐-Principal Development Lead - SharePoint
微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-prem ...
- Material Safety Data Sheet,MSDS - 化学品安全说明书
化学品安全说明书(Material Safety Data Sheet)MSDS,国际上称作化学品安全信息卡,是化学品生产商和经销商按法律要求必须提供的化学品理化特性(如PH值,闪点,易燃度,反应活性 ...
- 卡特兰数(Catalan)及其应用
卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项 ...
- Alpha发布——美工+文案
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2283 一.功能介绍 本团队(可以低头,但没必要)开发的是一款基于腾讯微信 ...
- Beta周王者荣耀交流协会第三次Scrum会议
1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王玉玲 2.时间跨度: 2017年11月12日 18:00 — 18:20 ,总计20分钟. 3.地点: 一食 ...
- Fisherman`Team的任务看板
- 解决Ubuntu16.04下git clone太慢问题
记录一些博客,省着自己再去找了... ss-qt5安装 生成.pac genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-pr ...
- mininet实验 连接floodlight控制器
参考博客一 参考博客二 事先准备-floodlight安装 Java安装方法及环境变量配置 执行ifconfig命令获取floodlight所在服务器的IP地址. 1.启动floodlight jav ...
- 此时本机的BootLoader程序坏了,也就是说grub第一阶段坏掉了,该如何修复
方法一:直接安装grub (1)先把MBR拷贝一份 dd if=/dev/sda of=/tmp/mbr count=1 bs=512 (2)然后再破坏 dd if=/dev/zero of=/d ...