`
zhaiyuehui
  • 浏览: 11676 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java中的null与空值

    博客分类:
  • java
阅读更多
初始化拿一个程序来说就是先加载基本的数据,拿变量来说就是给它一个初始值

分配内存,初始化实例变量的值,还有就是依次创建当前类所在继承链上的所有类的对象。如果有初始化块,会自动运行。

java中基本类型采用C与C++中相同的方法,不采用句柄的方式,基本类型的变量容纳了具体的值(固定长度),存在于堆栈中。

如果基本数据类型作为一个类的成员变量,即使不显示初始化(赋值),java中保证其获得一个默认初始值分别如下(C++没有这种功能):(这种赋默认值不适用与其作为局部变量的情况,不显示初始化会有编译期错误)
boolean false
char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

java中除了八大基本类型一切都是对象,在声明变量时String s;只是获得了一个句柄,其并不指向一个对象,在使用时必然会出现运行期错误(空指针)。应该初始化String s = “abcd”;

这是字符串这种特殊类型的初始化方式,更通用的是用new关键字进行句柄与新对象的链接。

一、null指的是不确定的对象;
null用来判断引用类型是否分配了存储空间。
String s = null;已经分配了存储空间,只是不确定是什么类型,称为空对象。(其实就是不确定对象时初始化分配内存的一种状态,等待被真的指向一个某对象)。

Java中,变量的使用都遵循一个原则,先定义,并且初始化后,才可以使用。我们不能int a后,不给a指定值,就去打印a的值。这条对对于引用类型变量也是适用的。

null代表声明了一个空对象,对空对象做任何操作都不行,除了=和==(==比较的是引用类型存储的地址,基本类型的值。)。
“”是一个字符串了,只是这个字符串里面没有内容。
String s=null;只是定义了一个句柄,也就是说你有了这个引用,但是这个引用未指向任何内存空间。
String s="";这个应用已经指向了一块是空字符串的内存空间,是一个实际的对象了,可以应用所有Sting类型的方法。

String s = "aaa";与String s=new String("aaa");有本质的区别:
前者是在字符串池中写入一个字符串“aaa”,然后用s指向它,在栈上分配内存;
后者是在堆上创建一个内容为“aaa”的字符串对象。
String a="";String b="";
上面两者变量a、b指向同一内存地址。
String a=new String("");String b=new String("");
上面两者变量a、b指向不同内存地址。
字符串缓冲池
原因是String类维护着一个字符串池,对于前两者的赋值方法,String会在这个池中查找字符串是否已经在池中,如果在,就直接指向该地址,如果不在,则生成一个实例放入池中,再指向。之所以这样做,因为String是一个内容不可变的量,运用的是设计模式GOF.FlyWeight。

String s=null;String s="";String s;三者的区别
第一个是创建一个空字符串对象;
第二个是创建一个字符串为空的字符串对象;
第三个是声明一个字符串对象,但并没有分配内存,而第一个第二个已经分配了内存。
对于第三种,不能使用if(s==null),或者int length = s.length();不能通过编译,报没有初始化。

第一和第三有时候是等同的,有时候是不同的。
java为了安全原因不允许一个悬挂引用,没有赋值的引用地址一律自动赋值为null,防止访问到任意内存。(但是此点只限于成员变量)
在局部变量中是不同的,String s不会分配内存,需要显示赋值。
总结:
java中成员变量编译器会自动赋值,局部变量都要显示赋初值。

注意静态资源的使用方法。
Map<String, Object> n = ll.hh();
Map hh(){
//1、return new HashMap<String, Object>();
2、return null;
}
1、返回的是HashMap对象,2返回的是null对象。instanceof前者为真,后者为假。
这里编程的时候要考虑到函数返回值为null的情况。


二、null本身不是对象,也不是Object的实例。
null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。

三、容器类型与null
List:允许重复元素,可以加入任意多个null。
Set:不允许重复元素,最大可以加入一个null。
Map:Map的key最多可以加入一个null,value字段没有限制。
数组:基本类型数组,定以后,如果不给定初始值,则java运行时会自动给定值。引用类型数组,不给定初始值,则所有的元素值为null。

四、null的其他作用
1、判断一个引用类型数据是否null。用==来判断。
2、释放内存,让一个非null的引用类型变量指向null。这样这个对象不再被任何句柄应用,会等待JVM垃圾回收机制去回收。

http://lavasoft.blog.51cto.com/62575/79243

http://www.360doc.com/content/12/1107/09/600840_246328536.shtml


引用类型当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
  对于引用类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

java中初始化是指分配内存
java中初始化顺序:

1,在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)
2,在装载类时,先装载父类A,再装载子类B
3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)
4,装载子类B后,完成静态动作
类装载完成,开始进行实例化
1,在实例化子类B时,先要实例化父类A
2,实例化父类A时,先成员实例化(非静态代码)
3,父类A的构造方法
4,子类B的成员实例化(非静态代码)
5,子类B的构造方法
分享到:
评论

相关推荐

    深入Java关键字null

    综上所述,`null`在Java中扮演着重要的角色,它不仅是一个特殊的值,还是编程中常见的一种状态标志,用于处理不确定或未初始化的对象引用。正确理解和使用`null`可以帮助开发者避免常见的编程陷阱,提高代码的质量和...

    详解Java去除json数据中的null空值问题

    本篇文章将详细介绍如何在Java中去除JSON数据中的`null`空值。 1. **Jackson库的解决方案** Jackson是Java中广泛使用的JSON处理库,它提供了丰富的功能,包括序列化和反序列化。在处理`null`值时,Jackson提供了一...

    Java中String判断值为null或空及地址是否相等的问题

    本文主要讨论了如何正确判断Java中的String对象是否为null、空值("")以及它们的地址是否相等。在处理字符串时,了解这些概念对于避免程序出错至关重要。 首先,我们需要区分`null`和空字符串`""`。`null`表示变量...

    spring mvc拦截器过滤json中的null值

    在Spring MVC框架中,我们经常需要处理JSON数据,这些数据可能包含null值。在某些情况下,为了保持数据的整洁和避免后端处理null值时出现异常,我们需要在数据传输前过滤掉这些null值。本教程将详细介绍如何使用...

    如何将数据库中的NUll写入到数据库中去

    在编程语言中,如Java、Python或C#,当我们通过API或库与数据库交互时,需要确保在对应字段设置为null。例如,在Java的JDBC中: ```java PreparedStatement pstmt = connection.prepareStatement("INSERT INTO ...

    java-validator:一个用于在类级别检查null和空值的Java验证库

    这是一个帮助程序库,用于在类级别验证Java类成员的空值和空值。 它旨在减少样板代码,即,它通过使用多个条件语句来缩短检查类的单个成员的值的时间范围。 我们甚至可以在层次结构级别上检查对象,即成员对象的成员...

    Java String转换时为null的解决方法

    Java中对象转换为String的常用方法之一是强制类型转换,使用强制类型转换时,对象obj为null,结果也为null,但是obj必须保证其本质是String类型的值,即可转换的值。例如,不能强制转换 (String) 123 toString方法 ...

    JAVA判断空值方法原理解析

    在 Java 编程语言中,判断空值是一个常见的操作,特别是在字符串处理中。Java 提供了多种方法来判断字符串是否为空,但这些方法的实现原理和效率却存在很大的差异。本文将深入探讨 Java 判断空值方法的原理,分析每...

    java程序员面试题

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    Android 批量移除集合中的空值

    批量移除集合中的空值可以通过多种方式实现,包括自定义方法、Java 8的Stream API或者使用第三方库。下面是一个简单的示例,展示了如何编写一个自定义方法来过滤掉集合中的null元素: ```java public static &lt;E&gt; ...

    mybatis 报空值异常

    这类问题通常出现在尝试将空值(`null`)插入数据库表中时,尤其是在未指定 JDBC 类型的情况下更为常见。本文将详细介绍这种异常的原因,并提供相应的解决方案。 #### 异常原因分析 当 MyBatis 在执行 SQL 语句时...

    更题SQL数据库表中NULL值

    如图:如何在java中实现将列名为Cardtype和Balance的空值更新成需要的数据

    null移动端崩溃问题

    在大多数编程语言中,尝试访问null对象的方法或属性会抛出异常,这在Java、Swift、Kotlin等移动开发常用的语言中尤为常见。例如,在Java中,如果你试图调用一个null对象的方法,会抛出NullPointerException;在Swift...

    java万能判空工具类-可直接使用

    在实际编程过程中,由于各种原因,我们经常会遇到null引用的问题,这可能导致程序运行时抛出NullPointerException。为了解决这个问题,开发者通常会编写一些辅助方法来检查对象是否为空,以确保代码的健壮性。本文将...

    回复:Java迷题:等于,还是不等于?

    这个问题涉及到Java中的数据类型、变量赋值、比较操作符以及空值(NULL)的处理。让我们深入探讨这个Java谜题,了解何时使用“==”和“!=”,以及如何正确处理NULL。 首先,我们要知道Java中的“==”操作符用于比较两...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为持久化的格式(如XML或JSON),以便存储或传输。XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入...

    Java中的Null到底是什么

    7. 枚举类与`null`:在Java中,枚举类型的实例永远不会是`null`。如果尝试访问不存在的枚举值,编译器会报错。 总之,`null`在Java中扮演着重要的角色,既是所有引用类型的默认值,也是表示对象不存在的标记。理解...

    java1.8-api

    7. **Nashorn JavaScript引擎**:Java 1.8集成了JavaScript引擎,允许Java程序直接执行JavaScript代码,促进了Java与JavaScript之间的交互。 8. **默认方法**:在接口中添加的带有实现的方法称为默认方法,允许接口...

    解决服务器返回null的问题.zip

    对于文本和富文本中的null值,处理方法通常是进行空值检查并采取适当的默认值或填充策略。在Java或类似的面向对象语言中,可以使用条件语句(如if)来检查字段是否为null,如果为null,则用一个空字符串或者其他合适...

    oracle class12.jar nls_charset12.jar存储过程接收数组空值

    然而,在实际操作中,我们可能会遇到一个问题,那就是如何正确地处理数组中的空值(NULL)或空元素。"oracle class12.jar nls_charset12.jar存储过程接收数组空值"这个标题所描述的,就是关于在Oracle 11g中解决这个...

Global site tag (gtag.js) - Google Analytics