<input type="text">中的value为null或"",有何区别

本人最近在亚信数据实习,有问题可以给我留言,随时交流


问什么突然查这个问题,因为在项目中遇到了,两个相差不多的模块,一个传的是null,而另一个传的是“”,而null是可以插入进数据库的,而“”是不可以的。所以有点迷惑,只有百度君来帮我下。

同时通过这个问题,也体会到了代码健壮性的重要


一般情况下我们是通过输入框来输入参数的。如果我们什么也没有输入,后面获取的就是null值。但是这个时候有一个问题,我们做软件不能认为用户总会按照我们认为正确的方式如乖乖的从文本框输入。我们的系统在发布的时候是不会知道用户是谁的,可能是一个什么也不知道的计算机文盲,也可能是黑客。如果是后者,他就会利用任何可能潜在的BUG来攻击我们的WEB。例如在URL里面传参。这个时候你也可能会说,如果我们定义成POST方式不就可以避免了吗?恩,这个时候我们的确可以避免URL传参,但我们并不能避免其他的方式。比如写一个伪页,向我们的后台提交请求。这个时候就是考验我们代码健壮性的时候了。他就可能会给我们的参数赋值一个“”而不是一个null。



再有一种可能就是我们在页面需要处理一些中间数据,这个时候我们可能会设置Text的值为“”,而不是让它是null。这样以来如果我们如果把这个提交到后台的话就会产生不可预知的错误。

总归一句话,这样做检查,就是为了让我们的代码更健壮。稳定性更强。

假设你接受的参数名为 str,他和 str = null 和str = "" 是两个概念。

1. str = null 的内存空间开辟过程如下:

开辟内存空间A, 存放参数名str, 其中它的指向为空,也就是说它没有指向任何内存空间。

2. str = ""的内存空间开辟过程如下:

开辟内存空间A,存放参数名str, 开辟内存空间B,将B得地址存放到A里面,也就是说str有了指向,且其指向为内存空间B. 但是B空间里面的值为空。也就是说是个空字符串

综上两点的意思是
一个开辟了对象STRING, 但是没有任何值。str = ""
一个没有开辟对象STRING。str = null

以上了解以后我们就可以区分为什么要同时检测者两种情况了。

如果str为null,则说明该对象未创建,这个时候调用其方法(如str.length())的时候就会抛出空指针错误。
如果str为"",说明我们创建了对象,只是其值为空,这个时候调用其length方法就不会抛出异常。

为了应对上述可能出现的空指针异常,我们就需要同时判断上述的两种可能。



转自:https://zhidao.baidu.com/question/103108769.html




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
这段代码是一个使用 Java 编写的 JSP 页面,用于进行复数运算。逐行解释如下: 第一行:<%@ page language="java" contentType="text/html; charset=UTF-8" import=" servlet.*" pageEncoding="UTF-8"%> - 这是一个指令,用于定义 JSP 页面的一些属性。language="java" 表示使用 Java 语言编写,contentType="text/html; charset=UTF-8" 表示输出的内容类型为 HTML,并且编码为 UTF-8,import=" servlet.*" 表示导入 servlet 包的所有类,pageEncoding="UTF-8" 表示页面的编码为 UTF-8。 第二行:<!DOCTYPE html> - 这是 HTML5 的文档类型声明,表示这个页面是使用 HTML5 标准编写的。 第三行:<html> - 这是 HTML 页面的开始标签。 第四行:<head> - 这是 HTML 页面的头部标签,用于定义页面的一些元信息。 第五行:<meta charset="UTF-8"> - 这是一个 meta 标签,用于定义页面的字符集编码为 UTF-8。 第六行:<title>复数运算</title> - 这是 HTML 页面的标题标签,用于定义页面的标题为“复数运算”。 第七行:</head> - 这是头部标签的结束标签。 第八行:<body> - 这是 HTML 页面的主体标签,用于定义页面的主体部分。 第九行:<h1>复数运算</h1> - 这是 HTML 页面的一级标题标签,用于定义页面主体部分的标题为“复数运算”。 第十行:<form method="post" action="ComplexCalculator"> - 这是一个 HTML 表单标签,用于定义一个表单。method="post" 表示使用 POST 方法提交表单数据,action="ComplexCalculator" 表示提交表单数据的 URL。 第十一行:<label>复数 1:</label> - 这是一个 HTML 标签,用于定义表单的标签。这里定义了一个名为“复数 1”的标签。 第十二行:<input type="text" name="real1" placeholder="实部"> - 这是一个 HTML 输入框标签,用于定义表单输入框type="text" 表示输入框类型为文本框,name="real1" 表示输入框的名称为“real1”,placeholder="实部" 表示输入框的占位符为“实部”。 第十三行:<input type="text" name="imag1" placeholder="虚部"> - 这是一个 HTML 输入框标签,用于定义表单输入框type="text" 表示输入框类型为文本框,name="imag1" 表示输入框的名称为“imag1”,placeholder="虚部" 表示输入框的占位符为“虚部”。 第十四行:<br> - 这是一个 HTML 换行标签,用于在表单换行。 第十五行:<label>复数 2:</label> - 这是一个 HTML 标签,用于定义表单的标签。这里定义了一个名为“复数 2”的标签。 第十六行:<input type="text" name="real2" placeholder="实部"> - 这是一个 HTML 输入框标签,用于定义表单输入框type="text" 表示输入框类型为文本框,name="real2" 表示输入框的名称为“real2”,placeholder="实部" 表示输入框的占位符为“实部”。 第十七行:<input type="text" name="imag2" placeholder="虚部"> - 这是一个 HTML 输入框标签,用于定义表单输入框type="text" 表示输入框类型为文本框,name="imag2" 表示输入框的名称为“imag2”,placeholder="虚部" 表示输入框的占位符为“虚部”。 第十八行:<br> - 这是一个 HTML 换行标签,用于在表单换行。 第十九行:<label>操作:</label> - 这是一个 HTML 标签,用于定义表单的标签。这里定义了一个名为“操作”的标签。 第二十行:<select name="operation"> - 这是一个 HTML 下拉列表标签,用于定义表单的下拉列表框。name="operation" 表示下拉列表框的名称为“operation”。 第二十一行:<option value="add">加</option> - 这是一个 HTML 选项标签,用于定义下拉列表框的选项。value="add" 表示选项的值为“add”,加号表示“加”。 第二十二行:<option value="subtract">减</option> - 这是一个 HTML 选项标签,用于定义下拉列表框的选项。value="subtract" 表示选项的值为“subtract”,减号表示“减”。 第二十三行:<option value="multiply">乘</option> - 这是一个 HTML 选项标签,用于定义下拉列表框的选项。value="multiply" 表示选项的值为“multiply”,乘号表示“乘”。 第二十四行:<option value="divide">除</option> - 这是一个 HTML 选项标签,用于定义下拉列表框的选项。value="divide" 表示选项的值为“divide”,除号表示“除”。 第二十五行:</select> - 这是 HTML 下拉列表标签的结束标签。 第二十六行:<br> - 这是一个 HTML 换行标签,用于在表单换行。 第二十七行:<input type="submit" value="运算"> - 这是一个 HTML 提交按钮标签,用于提交表单数据。type="submit" 表示按钮类型为提交按钮,value="运算" 表示按钮上的文本为“运算”。 第二十八行:<% Complex result = (Complex) request.getAttribute("result"); if (result != null) { %> - 这是一个 Java 代码块,用于获取请求属性的“result”属性,并将其强制转换为 Complex 类型,并将其赋值给 result 变量。如果 result 不为 null,则执行下面的代码。 第二十九行:<p>Result: <%= result %></p> - 这是一个 HTML 段落标签,用于显示计算结果。其的 <%= result %> 会被替换为 result 变量的值。 第三十行:<% } %> - 这是一个 Java 代码块的结束标记。 第三十一行:</body> - 这是 HTML 页面的主体标签的结束标记。 第三十二行:</html> - 这是 HTML 页面的结束标记。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值