`
yiminghe
  • 浏览: 1460570 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java autobox 的一点陷阱

    博客分类:
  • java
阅读更多

  应该是从jdk1.5 开始的吧,java 支持 基本类型的自动 封箱解箱 ,如 int 会 自动转化成 integer ,char 自动转为 character ,于是一不小心我就遇到了问题:


1.

 

//return a value 
Integer getV() {
  //
}

 

    经常会测试条件 : getV() == 1 || getV== 2   或 3==getV()




    经常会莫名报 nullpoint exception ,由于getV() 是别人写的接口 , 且 不可能出问题 ,分析良久才发现 getV()可能会返回 null  ,那么在与 1 作比较时 ,getV()返回的 Integer 会自动 解箱 为 int 型 ,但是 当返回为 null 时 没有对应的基本类型,就会出现 nullpoint 了。。。。



    基本上还是我的编程习惯不好,在对一个对象进行操作时 ,必须首先测试它是否为null ,或者 api开发人员采用了NULL 设计模式 时 另论 。



    全部改为  getV()!=null &&(getV() == 1 || 2 == getV()) 更为健壮了 ,仅供演示 ,getV()多次调用了。



2. java 的自动解箱 也用在了 函数原型匹配上 ,比如 定义函数

 

void x(char y) {
//TODO
}
Character yy=getCharacter();
x(yy);  //ps :idea 提示找不到函数 。。。

 


则 上述代码可以编译通过,并大多情况下可以运行 ,但是当 yy ==null 时 ,由于java 自动解箱 yy 为 char ,则 报出


nullpointexception  ,这点一定要注意了

 

ps: 来自某书的话:


有趣程序:

Integer i1 = 100;
		Integer i2 = 100;//显示"i1 == i2"
		if (i1 == i2) System.out.println("i1 == i2");
		else
		System.out.println("i1 != i2");
		 i1 = 200;  i2 = 200;
		if (i1 == i2) System.out.println("i1 == i2");
		else
		
		System.out.println("i1 != i2");
		//显示"i1 != i2"
 

在自动装箱时对于值从-128到127之间的 值,它们被装箱为Integer对象后,会存在 内存之中被重用

 

自动装箱与拆箱的功能是编译程序来帮忙

Integer i = 100;   //=> 

Integer i = new Integer(100);
 


自动装箱与拆箱的功能是所谓的「编译程序蜜糖」(Compilersugar)

Integer i = null;    int j = i; // =>

Integer i = null;    int j = i.intValue();
分享到:
评论

相关推荐

    AutoBox.exe

    这是一个推箱子小程序,里面可以自己创建关卡自己推箱子,自动求解路线

    基于jquery.ui Autobox 输入框提示.zip

    【标题】"基于jQuery.ui Autobox 输入框提示"是一个关于如何使用jQuery UI库中的Autobox插件来实现输入框提示功能的教程。这个压缩包包含了相关的代码示例和使用说明,帮助开发者提升用户界面的交互体验。 【描述】...

    Mojo-Autobox:Mojo-Autobox 的只读发布历史记录

    名称Mojo::Autobox - Perl 原生数据类型的一些额外 Mojo概要 use Mojo::Base -strict;use Mojo::Autobox;# "site.com\n"'{"html": "<a></a>"}' ->json('/html') ->dom->at('a')->{href} ->url->host ->byte_stream-...

    Mojo-Autobox:Perl 原生数据类型的一些额外 Mojo

    名称Mojo::Autobox - Perl 原生数据类型的一些额外 Mojo概要 use Mojo::Base -strict;use Mojo::Autobox;# "site.com\n"'{"html": "<a></a>"}' ->json('/html') ->dom->at('a')->{href} ->url->host ->byte_stream-...

    Autobox 输入框提示(基于jquery.ui)

    内容索引:脚本资源,jQuery,自动完成,下拉提示 基于jquery.ui的输入框提示Autobox 0.7.1版,测试了一下,好用,和其它的区别是增加了鼠标感应取值,也就是当鼠标放到提示信息上,提示信息会自动添加到输入框,不用...

    最基本的nmake 语法.pdf

    - 当`AutoBox.cs`发生变化时,需要重新构建`AutoBox.dll`。 3. **`csc /t:library AutoBox.cs`** - 使用`csc`命令(C#编译器)将`AutoBox.cs`编译为库文件(`/t:library`)。 - `csc`命令的具体参数可根据实际需求...

    dspace实例

    一个好用的例子,用于学习Dspace必备之选,我就是用这个学的Dspace,觉得不错。

    dSPACE MicroAutoBoxII的介绍

    ### dSPACE MicroAutoBox II 的详细介绍 #### 一、概述 dSPACE MicroAutoBox II 是由 dSPACE 公司开发的一款高性能实时控制原型系统。它主要用于汽车和其他交通工具的快速控制原型(RCP)开发,旨在帮助工程师们在...

    Control_Desk_Help.pdf

    2. 将AutoBox的网线连接到PC上,这样才能建立物理网络连接,让PC能够通过网络访问AutoBox设备。 3. 修改网络IP信息,这一步骤是为了确保PC与AutoBox之间的网络通讯能够正确进行,IP信息需要按照给定的网络配置进行...

    六自由度台架调试

    - 完成模型搭建后,进行编译以生成sdf文件,该文件是后续连接Autobox的基础。 #### 三、连接Autobox并进行调试 ##### 1. 连接Autobox - **网络连接**: - 使用黄色网线将计算机与Autobox相连。 - 配置计算机的...

    APK程序获取system权限的方法

    首先,要明确一点,system权限并不是所有应用都需要的,它涉及到用户隐私和系统稳定性,因此只有在确实需要访问系统级别的资源时,才应考虑获取这种权限。对于大多数开发者来说,应该尽可能地遵循最小权限原则,只...

    php+mysql+jquery实现简易的检索自动补全提示功能

    2. **CSS**:定义了`#autoBox`和`#autoBox li`的样式,包括边框、内边距、背景色、文字颜色等,使得提示框有良好的视觉效果。`#autoBox li:hover`定义了鼠标悬停时的样式,改变背景色和文字颜色,并设置光标为指针,...

    基于高速开关阀控制的液压制动伺服系统研制 (2005年)

    研制了一种基于高速开关阀对混合动力车辆传动实验台制动系统实施...应用dSPACE公司开发的AutoBox快速控制原型系统编制了系统的控制算法和模型,并进行了实验,实验结果表明,液压制动伺服系统能够满足制动性能的要求。

    基于μC/OS-II和Simulink开发环境实现OSEK顺应性软件的设计

    硬件有用于快速控制原型开发的AutoBox和用于硬件在环测试的模块,软件有产品级代码生成器TargetLink。它们在加快开发周期的同时,也提高了代码的可靠性。 平台软件方面,OSEK OS是广泛应用于汽车电子领域的嵌入式...

    电动汽车动力电池主动均衡控制研究.pdf

    此外,他们还利用dSPACE/AutoBox搭建了硬件在环实验系统,对恒流充放电和变流放电条件下的均衡控制进行了实验验证。实验结果显示,主动均衡控制策略在各种工况下都能快速响应,实现电池组的均衡,并且具有良好的均衡...

    自动推箱子 C++源代码

    在IT领域,自动推箱子(AutoBox)是一种基于经典逻辑游戏“推箱子”(Puzzle Box)的自动化解决算法的实现。本项目采用C++编程语言编写,旨在为玩家提供一个自动化解决推箱子关卡的工具,特别是对于那些难以解决或...

Global site tag (gtag.js) - Google Analytics