null和空字符串('')的区别-程序员宅基地

技术标签: 基础  

在Java开发中,我们需要常常判断是否值为null,尤其在xml数据交互过程中,我们判断某一个报文的值是否为null时候,经常需要用三目运算判断:如果值为null,则赋值空字符串(insert数据库时),那为什么需要这样呢?null和空字符串('')有什么区别?

public static void main(String[] args) {
        String aaa = null;
        System.out.println(aaa.indexOf("a"));
        System.out.println(aaa.length());
        // 报空指针异常
        //Exception in thread "main" java.lang.NullPointerException
        
        String bbb = "";
        System.err.println(bbb.indexOf("a")); //-1
        System.err.println(bbb.length());//0        
    }

null和空字符串('')虽然都是没有任何内容,但是null却输出空指针异常,因为堆内存中根本就没有这个东西。

他们的区别可相当大,虽然都是没有信息,但是null代表堆内存中根本没有这个东西,这个对象不存在,怎么执行indexof操作?空字符串虽然没有信息,但是是有内存空间的,所以null与空字符串主要区别如下:

1.类型
null表示的是一个对象的值,而非一个字符串。例如声明一个对象的引用,String aaa = null ;
""表示的是一个长度为0的空字符串。例如声明一个字符串String bbb = "" ;
所以:null不指向任何对象,相当于没有任何值;而""代表一个长度为0的字符串。

2.内存分配
String aaa = null ;
表示声明一个字符串对象的引用,但指向为null(未指向任何的内存空间);

String bbb = "";
表示声明一个字符串类型的引用,其值为""空字符串(指向空字符串的内存空间);

在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap)。
所以:null不分配内存空间;而""会分配内存空间。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39309402/article/details/98127031

智能推荐

【坑坑坑坑坑】dlsym----undefined symbol: hello_linux dlsym undefined symbol:-程序员宅基地

文章浏览阅读2.5k次。报错:lib/libhello_test1.so: undefined symbol: hello 查看libhello_test1.so的符号表:[root@xxhh test1]# nm libhello_test1.so | grep hello U _Z13hello_displayi000000000000071a T _Z5hello_linux dlsym undefined symbol:

Api-Domain-Model 模式_domain api-程序员宅基地

文章浏览阅读732次。何为Api-Domain-Model模式?在传统Web框架中,惯用MVC模式。可以说,MVC模式是使用最为广泛的模式,但同时也可能是误解最多的模式。然而,接口服务这一领域,与传统的Web应用所面向的领域和需要解决的问题不同,最为明显的是接口服务领域中没有View视图。如果把MVC模式生搬硬套到接口服务领域,不但会产生更多对MVC模式的误解,还不利于实际接口服务项目的开发和交付。仔细深入地再..._domain api

Chrome 您的连接不是私密连接 解决办法_您的连接不是私密连接 攻击者可能会试图从 the-x.cn 窃取您的信息(例如:密码、通-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏14次。Chrome 您的连接不是私密连接_您的连接不是私密连接 攻击者可能会试图从 the-x.cn 窃取您的信息(例如:密码、通

mac对虚拟机扩容_mac电脑安装的虚拟机可以后期扩大吗?-程序员宅基地

文章浏览阅读1.1k次。气死我了!觉得一定要写个博客,不然的话,今天下午感觉白忙活了,这是什么心理。 明天有门课程,需要用到虚拟机,但是我知道自己对虚拟机的水平,很垃圾···然后我万万没想到这么垃圾··· 好嘛,人家都卡在安装ns2,我在卡在ns2之前的依赖包了。目前还没解决,我已经放弃,选择另一个题目了。一. 扩容:先说扩容问题吧,他总是提醒我没有space了。然后有多种扩容方法,如果可以显示图形界面的,只需要按照下图所示即可 。 ..._mac电脑安装的虚拟机可以后期扩大吗?

如何将simulink的波形数据保存到workspace_simlinkscope示波器将波形数据传送到工作空间workspace-程序员宅基地

文章浏览阅读2.6w次,点赞12次,收藏90次。在用Simulink做仿真时,我们经常会用到示波器Scope来观察波形,它可以对波形进行局部放大、按横、纵座标放大,非常方便,但是如果我们要保存波形时,就最好别直接拷贝Scope波形了,因为它的背景是黑的,而且不能进行线形修改和标注,不适合作为文档用图。 一般的做法是将数据输出到工作空间,然后用画图指令Plot画图。输出到工作空间的方法一般有这么几种: 1.添加To Workspace模块; ..._simlinkscope示波器将波形数据传送到工作空间workspace

Unity FontSize字号单位_ps字体 与 unity字体大小不一致-程序员宅基地

文章浏览阅读1.9k次。FontSize字体大小单位是px_ps字体 与 unity字体大小不一致

随便推点

Python入门经典题斐波那契数列_斐波那契数列编程pythona=1-程序员宅基地

文章浏览阅读3.8k次,点赞4次,收藏5次。最简单的一种for循环实现斐波那契数列作者介绍斐波那契数列作者介绍一名大三学生,目前在北京实习培训,主学Python,现在入门阶段已基本完成。正在进行Python学习的深入研究和提高。斐波那契数列以下是前15项斐波那契数列:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 …这个数列从第3项开始..._斐波那契数列编程pythona=1

linux 管道交互,Linux C:具有独立读写命名管道的“交互式会话”?-程序员宅基地

文章浏览阅读97次。我正在尝试使用“使用命名管道的进程间通信简介 - 使用命名管道的全双工通信”,link;特别是fd_server.c(包括如下供参考)Linux C:具有独立读写命名管道的“交互式会话”?这是我的信息,并编译行::~$ cat /etc/issueUbuntu 10.04 LTS \n \l:~$ gcc --versiongcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3:~$ ..._linux c 交互式

微信公众号开发(四)------access_token的获取和保存_中控服务器 access_token-程序员宅基地

文章浏览阅读7.5k次。微信公众号开发(四)------access_token的获取和保存前言在前面的文章中,我们封装了各种消息和事件,并对公众号用户的消息做了简单的处理.在微信公众号上,除了这些功能以外,我们还可以通过微信提供的API接口来获取更多的信息,要使用这些接口,就需要使用一个全局的token------access_token,在微信的官网,有对于access_token的描述access_toke..._中控服务器 access_token

数据挖掘中特征筛选方法策略_方差选择法-程序员宅基地

文章浏览阅读2.6k次,点赞15次,收藏20次。前言数据挖掘中我们经常会遇到高维数据,特别是当我们的特征工程做得比较复杂时,这些特征可能会让我们的模型过拟合,或者很多特征是没有意义,对模型的优化起不到作用,反而会降低模型的运行效率和精度,所以我们需要对我们的特征变量进行筛选,去除掉无意义的特征,尽可能保留少而强的特征。下面是我用得最多的几个方法,也是我个人觉得最实用方法,其他特征筛选方法大家可以自行查阅资料,这里不多介绍。方差选择卡方检验相关系数互信息其他方法写在最后..._方差选择法

笔记目录&思维导图-DOM & BOM_将bom、dom、事件 所有的知识点整理成思维导图-程序员宅基地

文章浏览阅读483次。DOM & BOM的目录_将bom、dom、事件 所有的知识点整理成思维导图

linux 显卡驱动程序 接口,Linux显卡驱动程序Nvidia 384.59发布,增加对GeForce GT 1030 GPU支持...-程序员宅基地

文章浏览阅读324次。Nvidia再本周一发布一款用于Linux,FreeBSD和Solaris操作系统的显卡驱动程序,版本为384.59,增加了对新GPU的支持,以及一系列错误修复和改进。Nvidia 384.59现在被认为是用于GNU/Linux,FreeBSD和Solaris平台的专有显卡驱动程序的最高级版本,用户应在阅读本文后可以在受支持的Nvidia GPU的个人计算机上安装次驱动。Nvidia 384.59..._freebsd gt1030