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基础入门(迭代器和生成器)
1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 ...
- nginx 日志模块
ngx_http_log_module.c 数据结构 typedef struct { void **main_conf; void **srv_conf; void **loc_conf;} ngx ...
- 在jre1.8版本下,使用ikvm将jar转换为dll,以供c#调用
由于合作方使用.net编程,jar包不能用,需要转换成dll格式,来回转换了十几个dll文件(心塞..),终于生成了一个可用的.在这里将走过的弯弯绕绕总结下,希望遇到相似问题的同好们,能走得顺利些. ...
- 20181120-4 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 01
此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 版本控制地址 https://git.coding.net/lg ...
- Week4_Linux书本一二两章
第一章的学习内容就是对Linux内核有一个基本的了解,同时知道一些关于Linux的知识. 学习Linux,可以自己有一台装有Linux操作系统的机器,源代码的作用无可替代: Linux发展历程简介:L ...
- ipv6问题
1)百度搜索:针对苹果最新审核要求为应用兼容IPv6 2) ipV6测试网址:http://test-ipv6.com/ http://ipv6.jmu.edu.cn/ http://ipv6test ...
- [图算法] 1003. Emergency (25)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- 【php】header下载文件后,文件变大的问题;(ob_clean()清空缓存)
事由: 按照常理,为了下载一个生产的文件,都是使用header函数,指定下文件信息,然后开始下载,但是下载后发现,文件体积总是比源文件要大2个字节,源文件是24字节,下载后是26字节,查看服务器返回的 ...
- scss在ide的命令参数
%FileName% ../css/%FileBaseName%.css --sourcemap=none –style expanded
- 利用JavaFX访问MySQL数据库
1. 创建数据库表 create table Course( courseId char(5), subjectId char(4) not null, courseNumber integer, t ...
