23 个答案:

答案 0 :(得分:201)

“”是一个实际的字符串,虽然是空字符串。

但是,

null表示String变量指向任何内容。

a==b返回false,因为“”和null不占用内存中的相同空间 - 换句话说,它们的变量不指向相同的对象。

a.equals(b)返回false,因为“”显然不等于null。

不同之处在于,因为“”是一个实际的字符串,你仍然可以在其上调用方法或函数,如

a.length()

a.substring(0, 1)

等等。

如果String等于null,如b,如果你尝试调用,Java会抛出NullPointerException,比如说:

b.length()

如果您想知道的差异是==与等于,那就是:

==比较引用,就像我去了

String a = new String("");

String b = new String("");

System.out.println(a==b);

那会输出false,因为我分配了两个不同的对象,而a和b指向不同的对象。

但请注意,Java确实有一个针对字符串的特殊情况。

String a = "abc";

String b = "abc";

System.out.println(a==b);

您会认为输出为false,因为它应该分配两个不同的字符串。实际上,Java将intern文字字符串(在我们的示例中初始化为a和b的字符串)。所以要小心,因为这可能会对==如何工作产生误报。

答案 1 :(得分:182)

您也可以通过以下方式理解null和空字符串之间的区别:

答案 2 :(得分:13)

String是一个Object,可以为null

null表示未实例化String对象

“”是实例化的对象字符串的实际值,如“aaa”

答案 3 :(得分:12)

你的陈述告诉你的只是“”与null不同 - 这是真的。 “”是一个空字符串; null表示没有赋值。

尝试可能更具启发性:

System.out.println(a.length()); // 0

System.out.println(b.length()); // error; b is not an object

“”仍然是一个字符串,这意味着您可以调用其方法并获取有意义的信息。 null是一个空变量 - 那里几乎没有任何东西。

答案 4 :(得分:9)

此处为a is an Object,但b(null) 不一个对象,它是一个空引用

System.out.println(a instanceof Object); // true

System.out.println(b instanceof Object); // false

答案 5 :(得分:9)

两者之间存在显着差异。空字符串""是“其中没有字符的字符串”。它是一个具有明确定义长度的实际字符串。所有标准字符串操作都在空字符串上定义良好 - 您可以将其转换为小写,查找其中某个字符的索引等。空字符串null是“根本没有字符串。 “它没有长度,因为它根本不是字符串。尝试将任何标准字符串操作应用于空字符串将在运行时导致NullPointerException。

答案 6 :(得分:8)

null表示该名称未引用任何实例化对象。 “”表示空字符串。

这里a正在引用一些恰好是空字符串的对象。 b未引用任何对象,因为它为null。

答案 7 :(得分:5)

在Java中,分配了null的引用类型根本没有值。分配给""的字符串有一个值:一个空字符串,也就是说一个字符串中没有字符。当赋值变量null时,意味着没有任何类型的基础对象,字符串或其他。

答案 8 :(得分:4)

String s = "";

s.length();

String s = null;

s.length();

对空字符串""的引用指向堆中的对象 - 因此您可以在其上调用方法。

但是指向null的引用没有指向堆中的对象,因此您将获得NullPointerException。

答案 9 :(得分:4)

“”和null两者都不同。第一个意味着作为字符串变量声明的一部分,字符串常量已在字符串池中创建,并且已为其分配了一些内存。

但是当我们用null声明它时,它刚刚被实例化为jvm,但是没有为它分配内存。因此,如果您尝试通过使用“” - 空变量进行检查来访问此对象,则无法阻止nullpointerexception。请在下面找到一个用例。

public class StringCheck {

public static void main(String[] args) {

// TODO Auto-generated method stub

String s1 = "siddhartha";

String s2 = "";

String s3 = null;

System.out.println("length s1 ="+s1.length());

System.out.println("length s2 ="+s2.length());

//this piece of code will still throw nullpointerexception .

if(s3 != ""){

System.out.println("length s3 ="+s3.length());

}

}

}

答案 10 :(得分:1)

空字符串与a不同

中的空引用

面向对象的编程语言

null引用字符串类型

不指向字符串对象和

将导致错误是一个尝试

对它执行任何操作。空的

string仍然是一个字符串

可以尝试字符串操作。

来自维基百科关于empty string的文章。

答案 11 :(得分:1)

此图像可能有助于您了解差异。

答案 12 :(得分:0)

字符串可以为空或具有null值。如果字符串是null,则它不是指内存中的任何内容。试试s.length()>0。这是因为如果一个字符串为空,它仍然返回0的长度。因此,如果你没有为它输入任何内容,那么它仍将继续循环,因为它没有将字符串注册为null。然而,如果你检查长度,那么它将退出它的循环。

答案 13 :(得分:0)

String s=null;

字符串未初始化为null。如果尝试了任何字符串操作,都可能引发空指针异常

String t="null";

这是一个字符串文字,其值字符串为“ null”,类似于t =“ xyz”。它不会抛出空指针。

String u="";

它是一个空字符串,不会抛出空指针。

答案 14 :(得分:0)

空字符串与空字符串之间的区别。例如:您有一个名为x的变量。如果您使用JS编写,

var x = "";

这意味着您分配的值是空字符串(长度为0)。实际上,这有点像,但是什么都没有感觉:)另一方面,

var y = null;

这意味着您尚未为y分配一个值,该值在声明时将y写入y即可明确表示。如果你写y.length;它将引发错误,表明没有分配给y的值,因此无法读取y的长度。

答案 15 :(得分:0)

从数学上可以更好地理解这个概念。您是否曾尝试使用计算器(如7/0)将数字(非零)除以0?你会得到一个看起来像这样的结果:undefined,not a number,null等。这意味着由于某些原因操作是不可能的(让我们把这些理由留待讨论另一个天)。

现在,执行:0/7。你将获得输出,这意味着操作是可能的并且可以执行,但你的答案只是0,因为除法后没有剩下任何东西。有一个有效的输出,输出为零。

在第一个示例中,不仅输出无效,而且无法执行操作。这类似于java中的null字符串。第二个示例类似于empty字符串。

答案 16 :(得分:0)

很棒的答案,但我想换一个角度来看。

String a = "StackOverflow";

String a1 = "StackOverflow" + "";

String a2 = "StackOverflow" + null;

System.out.println(a == a1); // true

System.out.println(a == a2); // false

因此,这可以告诉我们“”和null指向不同的对象引用。

答案 17 :(得分:0)

答案 18 :(得分:0)

null毫无意义;这表示您从未为变量设置值,而为空表示您已为String设置了“”值,例如,请参见以下示例:

String str1;

String str2 = "";

这里str1是null,表示您已经定义了它,但尚未设置任何值,但是您已经定义了str2并为其设置了空值,因此它具有一个值甚至那个值是“”;

但是

答案 19 :(得分:0)

写作时

String a = "";

这意味着存在一个字符串类型的变量“ a”,该变量指向字符串池中具有值“”的对象引用。由于变量a持有有效的字符串对象引用,因此可以在此处应用所有字符串方法。

撰写时

String b = null;

这意味着存在一个字符串类型的变量b,该变量指向未知引用。和未知参考任何操作将导致NullPointerException。

现在,让我们评估以下表达式。

System.out.println(a == b); // false. because a and b both points to different object reference

System.out.println(a.equals(b)); // false, because the values at object reference pointed by a and b do not match.

System.out.println(b.equals(a)); // NullPointerException, because b is pointing to unknown reference and no operation is allowed

答案 20 :(得分:0)

简单来说

“”是空的字符串

null是空的String变量。

答案 21 :(得分:0)

出于好奇

String s1 = null;

String s2 = "hello";

s1 = s1 + s2;

System.out.println((s); // nullhello

答案 22 :(得分:0)

关于现实世界,可以假定两者相同。它只是一种编程语言的语法,这在两者之间造成了差异,正如其他人在这里所解释的。这只会产生开销,例如在检查/比较字符串变量是否包含某些内容时,您必须首先检查其是否不为null,然后再进行实际的字符串比较,即两次比较。每次进行字符串比较都浪费了处理能力。

Objects.equals()在调用.equals()之前检查null。

java null empty_null和empty(“”)Java String之间的区别相关推荐

  1. java byte数组string_byte数组和String之间的转化

    JAVA里面关于byte数组和String之间的转换问题 把byte转化成string,必须经过编码. 例如下面一个例子: import java.io.UnsupportedEncodingExce ...

  2. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  3. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  4. java null转换jason_Java笔记Java常量、变量

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在Java语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要 ...

  5. java executequery_java execute、executeQuery和executeUpdate之间的区别

    在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...

  6. java ordered list_关于并行处理:Java 8的forEachOrdered()和sequence()方法之间的区别?...

    我正在使用Java 8并行流,并且希望以并行流的方式打印元素是某种顺序(例如插入顺序,反向顺序或顺序顺序). 为此,我尝试了以下代码: System.out.println("With fo ...

  7. java jli.dll_JVM、JRE、JDK之间的区别和联系,你居然还不知道?

    JDK包含了JRE,JRE包含了JVMJDK:java开发工具包,针对java开发人员,可以编译运行java程序 JRE:java运行时环境,针对使用java程序的客户,可以运行字节码(.class) ...

  8. Java中如何实现Date与String之间的数据类型转换

    String 数据类型转换成 Date String inputDate = "2021-04-11";Date outputDate = null;SimpleDateForma ...

  9. java null转换jason_常见java问题及解决办法汇总(干货可收藏)

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

最新文章

  1. oracle导出库压缩参数,oracle数据库的定时备份:导出 压缩 归类
  2. leetcode-125-Valid Palindrome
  3. CodeForces - 1459D Glass Half Spilled(dp)
  4. $.each()与$(selector).each()
  5. c++ 不插入重复元素但也不排序_面试官爱问的 10 大经典排序算法,20+ 张图来搞定...
  6. C/C++编程笔记:经典游戏植物大战僵尸游戏辅助,源码送上
  7. 不在gopath目录下能使用godoc吗_一文搞懂 Go Modules 前世今生及入门使用
  8. 特斯拉Model 3再次停工!这一次还是因为自动化机器人……
  9. 数据结构 【实验 串的基本操作】
  10. ajax error的报错提示
  11. Python安装包下载、环境配置与工具包安装教程(详细版)
  12. Typescript入门教程(B站黑马程序员)
  13. 关于数位板电脑绘画——入门篇
  14. IndexError: index 0 is out of bounds for axis 0 with size 0
  15. Science Robotics | 美国造“自我意识”机器人?还能自我复制?
  16. mysql tcp性能优化_MySQL性能优化: 使用pt-query-digest分析慢查询日志
  17. 【Atlas 200 DK】(一)简介 Atlas 200 DK 开发者套件(型号:3000)
  18. 简述windows计算机启动过程,计算机启动过程
  19. Matlab 调用Optris Pi 450i红外相机direct SDK相关函数摘记
  20. 企业知识管理的重要性

热门文章

  1. 小米自研语音合成声音定制技术:让世界听见你的声音!
  2. iPhone 12或9月10日亮相国内;华为推出PC版HMS“擎云生态”;银河麒麟操作系统V10发布 | EA周报...
  3. JSD-2204-(业务逻辑开发)-开发分类功能-分页查询-Day08
  4. 币圈是你享受过一夜暴富后,你便再也忘不掉捷径
  5. vue请求数据放在created好还是mounted里好
  6. 【pprof】简要学习教程
  7. android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...
  8. 关于Photoshop的JXA、UXP文档整理
  9. C++ 类的继承,基类,派生类
  10. 手把手教你用Python做个可视化的“剪刀石头布”小游戏