当前位置: 首页 > news >正文

为什么我们在判断字符串不为null后还要判断字符串长度大于0?

我们在做字符串判断时一般会:

if (s != null && s.length() > 0) {}

但是我就在想,字符串不为空了,那么他一定有值,字符串长度不就大于0吗,所以s.length()>0是不是有点多余?

我的思维误区是 :字符串不为null,长度必大于0

并不是这样的,看下面:

String s1;      //
String s2=null; //s2.length() 空指针异常
String s3="";   //s3.length() = 0,s3!=null
String s4=" ";  //s2.length() = 1

字符串s3是一个空串,s3!=null,但是长度为0

s != null      过滤null
s.length() >0  过滤空字符串,也就是s3那种

区分空串和null

空字符串“”

1、类型:“”是一个空字符串(String)长度为0占内存在内存中分配一个空间,可以使用Object对象中的方法。(例如:“”.toString()等)

2、内存分配:表示声明一个字符串类型的引用,其值为“”空字符串,这个引用指向str1的内存空间。

null

1、类型:null是空引用表示一个对象的值没有分配内存,调用null的字符串的方法会抛出空指针异常。(例如:str1.endsWith(str2); java.lang.NullPointerException)

2、内存分配:表示声明一个字符串对象的引用,但指向null,也就是说没有指向任何内存空间。

例: String str1 = ""; //str1对应一个空串,声明对象的引用
String str2 = null;      //str2引用为空

值得一提的是,做判断通常要先判断是否为null,再判断是否为空串,即长度是否大于0,

如果我先判断是否空串,再判断是否为null,可不可以呢?

不可以,如果一个字符串s=null;当执行s.length()方法时会出现空指针异常!!!

相关文章:

为什么我们在判断字符串不为null后还要判断字符串长度大于0?

我们在做字符串判断时一般会: if (s ! null && s.length() > 0) {} 但是我就在想,字符串不为空了,那么他一定有值,字符串长度不就大于0吗,所以s.length()>0是不是有点多余? 我的思维误区是…...

javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)

文章目录什么是域名1. 如何建立 域名 与 IP 的对应关系2. 域名的分级什么是域名 域名也就是平常所说的网址,比如 www.baidu.com。 其实网络上的服务器要访问这个网址,需要的是 IP 地址。、 但是 IP 地址比较拗口不方便记忆,于是就有使用一些…...

【网络】-- 网络编程套接字(铺垫、预备)

目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路: 唐僧的出发地到目的地:东…...

一文打通@SentinelResource

Sentinel 提供了 SentinelResource 注解用于定义资源&#xff0c;并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等 如果使用的是Sentinel Annotation AspectJ Extension&#xff0c;需要导这个依赖 <dependency><groupId>com.alibaba.csp</…...

苹果手机备份的文件在电脑什么地方 苹果备份文件怎么查看

在这个网络信息时代&#xff0c;为手机进行定期备份已经成为了家常便饭。在使用备份软件对苹果手机进行备份后&#xff0c;苹果手机备份的文件在什么地方&#xff0c;苹果备份文件怎么查看呢&#xff1f;本文就带大家来了解一下。 一、苹果手机备份的文件在电脑什么地方 大家…...

【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点

&#x1f340; 写在前面 这篇5000多字博客也花了我几天的时间&#x1f602;&#xff0c;主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻&#xff0c;欢迎关注我哟】&#xff0c;当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字&#xff0c;错别字可…...

并发编程——synchronized优化原理

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 一&#xff1a;基本概念 使用synchronized实现线程同步&#xff0c;即加锁&#xff0c;实现的是悲观锁。加锁可以使一段代码在同一时间只有一个线程可以访问&#xff0c;在增加安全性的同…...

LeetCode 剑指 Offer II 083. 没有重复元素集合的全排列

给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 1 < nums.length < 6 -10 < nu…...

JSONObject与JSONArray使用区别

目录 1.使用的场景区别 2. 使用方法区别 3.获取方式不同 4. 解析JSON字符串 5.总结 1.使用的场景区别 想通过键值对的形式获取数据&#xff0c;使用JSONObject。如果后台查询的是某个bean的list集合向前端页面传递&#xff0c;使用JSONArray。 2. 使用方法区别 创建方法不…...

经典C程序例程:通过进程ID得到文件名

通过进程ID得到文件名 #include <stdio.h> #include <windows.h> #include <tlhelp32.h> #include <tchar.h>BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName); void DispProcess(void); void DispPrsFile(void);// typedef BOOL (_stdcall *E…...

【Java】Spring MVC程序开发

文章目录Spring MVC程序开发1. 什么是Spring MVC&#xff1f;1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC&#xff1f;3. 怎么学习Spring MVC&#xff1f;3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…...

leetcode题解-704. 二分查找

给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…...

2.2 C语言程序的错误条件

在C语言程序中,条件语句决定程序的执行路径,因此条件表达式是程序的关键。 应用最经典的程序,除法的减法实现程序,解释条件表达式的重要性。x=y*q+r,x是被除数,y是除数,q是商,r是余数。 程序的方法, x=(r-y)+y*(1+q)。 main(){ /*错误条件的程序*/ r:=x; q:=0; whil…...

laravel 邮件发送

配置 Laravel 的邮件服务可以通过 config/mail.php 配置文件进行配置。 邮件中的每一项都在配置文件中有单独的配置项&#xff0c;甚至是独有的「传输方式」&#xff0c;允许你的应用使用不同的邮件服务发送邮件 mailers > [smtp > [transport > smtp,host > env(M…...

高性能 Jsonpath 框架,Snack3 3.2.57 发布

Snack3&#xff0c;一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明&#xff0c;及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示&#xff0c;ONode也即 One node 之意&#xff0c;代表任何类型&#xff0c;也可以转换为任何类型。 强调文档…...

Android---进程间通信机制3

1 服务如何注册到 SM 中 getIServiceManager().addService(name, service, false); getIServiceManger --- new ServiceManagerProxy(new BinderProxy()) BinderInternal.getContextObject --- 返回 BinderProxy 对象 ProcessState::self()->getContextObject: 创建一个 BpB…...

Python实战,爬取金融期货数据

大家好&#xff0c;我是毕加锁。 今天给大家带来的是 Python实战&#xff0c;爬取金融期货数据 文末送书&#xff01; 文末送书&#xff01; 文末送书&#xff01; 任务简介 首先&#xff0c;客户原需求是获取https://hq.smm.cn/copper网站上的价格数据(注&#xff1a;获取的是…...

Allegro如何导入第三方网表操作指导

Allegro如何导入第三方网表操作指导 在用Allegro做PCB设计的时候,除了支持第一方网表的导入,同样也是可以导入第三方网表的,第三方网表如下图 如何导入,具体操作如下 点击Setup点击User Preference...

高码率QPSK调制解调方案(FPGA实现篇)

在前面的章节中,已经讲过QPSK调制的方案和Matlab算法仿真,在本篇中,主要讲解基于FPGA的高速QPSK调制的实现。根据前面提到的技术指标,本系统传输的数据速率为500Mbps,中频为720MHz,因此,传统的串行QPSK调制已经不合适在FPGA中实现,需采用全数字的并行方式进行调制,具体…...

Elasticsearch的RESTful Api使用

Elasticsearch的RESTful Api使用 文章目录Elasticsearch的RESTful Api使用查询集群健康情况查看所有索引其他的_cat命令创建索引删除索引修改索引查看索引创建文档批量操作文档删除文档查询文档全量更新文档局部更新文档索引的搜索分词分析分数说明查询类型分析查询集群健康情况…...

用STM32CubeMX和TMC260驱动步进电机,这份PWM频率配置指南帮你避开新手常见坑

STM32CubeMX与TMC260步进电机驱动实战&#xff1a;PWM频率配置的黄金法则 第一次用STM32CubeMX配置TMC260驱动步进电机时&#xff0c;我盯着屏幕上那一堆定时器参数发愣——Prescaler、Period、Counter Mode...这些看似简单的数字背后&#xff0c;藏着让电机平稳运转或是疯狂抖…...

Qwen3.5-2B边缘部署案例:车载终端实时识别路标+语音播报导航提示

Qwen3.5-2B边缘部署案例&#xff1a;车载终端实时识别路标语音播报导航提示 1. 项目背景与需求 在智能驾驶和车载辅助系统领域&#xff0c;实时路标识别与语音导航是提升驾驶安全性的关键技术。传统方案通常需要&#xff1a; 独立的视觉识别模块处理路标额外的语音合成引擎生…...

intv_ai_mk11一文详解:7B参数轻量级开源对话模型在中小团队中的降本增效实践

intv_ai_mk11一文详解&#xff1a;7B参数轻量级开源对话模型在中小团队中的降本增效实践 1. 轻量级AI对话助手的价值定位 在中小团队的实际运营中&#xff0c;专业AI助手的引入往往面临两大难题&#xff1a;高昂的部署成本和复杂的技术门槛。intv_ai_mk11作为7B参数的轻量级开…...

Vector API + Panama Foreign Function最新融合实践(2024 Q2实测):纯Java实现BLAS级矩阵运算

第一章&#xff1a;Vector API Panama Foreign Function融合背景与技术演进Java 平台长期面临两大性能瓶颈&#xff1a;一是 JVM 对现代 CPU 向量化指令&#xff08;如 AVX-512、SVE&#xff09;缺乏直接、安全、可移植的抽象&#xff1b;二是 Java 与本地系统库&#xff08;如…...

MIT-BEVFusion LiDAR Encoder 保姆级拆解:从点云到BEV特征图,手把手带你过一遍代码

MIT-BEVFusion LiDAR Encoder 深度解析&#xff1a;从点云到BEV特征图的完整实现路径 当自动驾驶系统需要理解周围环境时&#xff0c;LiDAR点云数据的高效处理成为关键挑战。MIT-BEVFusion框架中的LiDAR编码器模块&#xff0c;通过创新的稀疏卷积架构&#xff0c;将无序的三维点…...

手把手教你用Transceiver Wizard搞定UltraScale FPGA的GTY时钟网络规划

手把手教你用Transceiver Wizard搞定UltraScale FPGA的GTY时钟网络规划 在FPGA高速收发器设计中&#xff0c;时钟网络的合理规划往往是决定系统稳定性的关键因素。对于刚接触Xilinx UltraScale架构的开发者来说&#xff0c;GTY收发器的时钟分配规则就像一座迷宫——相邻Bank共享…...

【硬核】K8s GPU调度从入门到“精通”:不止Device Plugin,还有MIG、DRA和那些你踩过的坑

K8s GPU调度从入门到“精通”&#xff1a;不止Device Plugin&#xff0c;还有MIG、DRA和那些你踩过的坑你以为把GPU挂上K8s就万事大吉了&#xff1f;错&#xff01;调度策略、硬隔离、软隔离、抢占回收…每一个环节都可能是你烧钱的坑。本文从实战出发&#xff0c;手把手教你如…...

模糊逻辑温度控制器:技术革新与市场前景深度解析

在工业自动化与智能制造浪潮中&#xff0c;温度控制作为核心工艺环节&#xff0c;其精度与稳定性直接影响产品质量与生产效率。模糊逻辑温度控制器凭借其独特的算法优势&#xff0c;正从传统PID控制器的“替代者”升级为高端制造场景的“刚需品”。本文将从技术原理、市场格局、…...

SonarQube实战:通过pom.xml配置sonar-maven-plugin实现自动化代码扫描

1. 为什么需要自动化代码扫描 在软件开发过程中&#xff0c;代码质量是决定项目成败的关键因素之一。想象一下&#xff0c;你正在建造一栋房子&#xff0c;如果砖块质量不过关&#xff0c;水泥配比不对&#xff0c;即使外观再漂亮&#xff0c;也可能随时倒塌。代码也是如此&…...

OpenClaw对接Qwen3-4B实战:5步完成本地模型调用与自动化任务

OpenClaw对接Qwen3-4B实战&#xff1a;5步完成本地模型调用与自动化任务 1. 为什么选择OpenClawQwen3-4B组合 去年冬天第一次听说OpenClaw时&#xff0c;我正被重复性的文件整理工作折磨得焦头烂额。作为一个习惯用脚本解决问题的开发者&#xff0c;我试过各种自动化工具&…...