0

0

Java编程中那些需要注意的细节

无忌哥哥

无忌哥哥

发布时间:2018-07-18 11:40:10

|

1789人浏览过

|

来源于php中文网

原创

常言道:“细节决定成败”,编程更是如此。

近期,我参加的一个项目,让我对此体会深刻。

这个项目属于推荐系统的一部分,我负责的一块是进行MapRedcue编程,计算视频之间的相似度!另一个同事就把我计算出来的结果用Sqoop导入到数据库中,供线上调用。

在导入数据的过程中,总是爆出java.lang.NumberFormatException异常,我认为是他那里的原因,他的Sqoop没有进行空行或者空格过滤,我的相似度结果是没有错的。后来他把一部分相似度结果复制到Notepad里面,发现有的数据有空格,他是直接读入,然后进行转换,当然就出现问题了。我不知道Sqoop能不能进行空格过滤,但是,我的程序可以控制输出的结果,所以就对每一个输出结果都调用了java.lang.String类的trim()方法。最终问题解决。

空格,总是会造成一些小问题,但是不容忽视。消除空格,记得调用trim()方法。

另一个问题是基本数据类型的封装类进行比较的时候,可能不是比较的数值,而是内存的地址!

立即学习Java免费学习笔记(深入)”;

相似度计算的过程中,有一个地方需要进行java.lang.Long类型之间的相等判断。我发现最终的相似度输出结果不正确时,排查原因,最终定位到这里。原来的代码是这样的:

if(lg1 == lg2){
    return true;
}

lg1和lg2都是java.lang.Long类型,我在这里是想判断lg1和lg2的数值是否相等,之前,我只是笼统地记得,Java的封装类进行比较的时候会进行转换的,所以就这样写了!但是这样写也可能比较大不是数值,而是他们各自在内存中的地址。

我用Google搜索了这个问题,网上说,java.lang.Float类型和java.lang.Double类型使用“==”进行相等判断需要转换成基本数据类型,java.lang.Integer和java.lang.Long则不需要转换,Java会自动转换的。但是,我自己做的测试跟这种说法有出入。下面是测试代码:

Android中JNI编程的那些事儿 中文WORD版
Android中JNI编程的那些事儿 中文WORD版

本文档主要讲述的是Android中JNI编程的那些事儿;JNI译为Java本地接口。它允许Java代码和其他语言编写的代码进行交互。在android中提供JNI的方式,让Java程序可以调用C语言程序。android中很多Java类都具有native接口,这些接口由本地实现,然后注册到系统中。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
package org.jindao.basic;

/**
 * @author 
 * @date 2013年10月25日 上午7:30:47
 */
public class BasicTest {
	public static void main(String[] args) {
		Integer ig1 = 3;
		Integer ig2 = 3;
		System.out.println("Integer ig1 = 3,Integer ig2 = 3  ig1==ig2的结果为:"+(ig1==ig2));
		
		Integer ig3 = new Integer(3);
		Integer ig4 = new Integer(3);
		System.out.println("Integer ig3 = new Integer(3),Long ig4 = new Integer(3) ig3==ig4的结果为:"+(ig3==ig4));
		
		Long lg1 = 3l;
		Long lg2 = 3l;
		System.out.println("Long lg1 = 3l,Long lg2 = 3l lg1==lg2的结果为:"+(lg1==lg2));
		
		Long lg3 = new Long(3);
		Long lg4 = new Long(3);
		System.out.println("Long lg3 = new Long(3),Long lg4 = new Long(3) lg3==lg4的结果为:"+(lg3==lg4));
		
		Float flt1 = 3.2f;
		Float flt2 = 3.2f;
		System.out.println("Float flt1 = 3.2f,Float flt2 = 3.2f  flt1==flt2的结果为:"+(flt1==flt2));
		
		Float flt3 = new Float(3.2);
		Float flt4 = new Float(3.2);
		System.out.println("Float flt3 = new Float(3.2),Float flt4 = new Float(3.2)) flt3==flt4的结果为:"+(flt3==flt4));
		
		Double db1 = 3.2;
		Double db2 = 3.2;
		System.out.println("Double db1 = 3.2,Double db2 = 3.2 db1==db2的结果为:"+(db1==db2));
		
		Double db3 = new Double(3.2);
		Double db4 = new Double(3.2);
		System.out.println("Double db3 = new Double(3.2),Double db4 = new Double(3.2) db3==db4的结果为:"+(db3==db4));
	}
}

运行结果:

Integer ig1 = 3,Integer ig2 = 3  ig1==ig2的结果为:true
Integer ig3 = new Integer(3),Long ig4 = new Integer(3) ig3==ig4的结果为:false
Long lg1 = 3l,Long lg2 = 3l lg1==lg2的结果为:true
Long lg3 = new Long(3),Long lg4 = new Long(3) lg3==lg4的结果为:false
Float flt1 = 3.2f,Float flt2 = 3.2f  flt1==flt2的结果为:false
Float flt3 = new Float(3.2),Float flt4 = new Float(3.2)) flt3==flt4的结果为:false
Double db1 = 3.2,Double db2 = 3.2 db1==db2的结果为:false
Double db3 = new Double(3.2),Double db4 = new Double(3.2) db3==db4的结果为:false

从结果可以看出,只有Integer和Long类型直接赋数值的时候,使用“==”判断相等才会为true,其余的时候都为false。

也就是说其余的情况比较多都是变量在内存存放的地址,并不是变量的数值。

那为什么Integer和Long类型直接赋数值,结果为true,而Float和Double类型直接赋数值,结果为false呢?我猜测,Java本身有优化措施,就是给Integer和Long类型直接赋数值的时候,内存里面并没有建立Integer和Long类型的对象,而是直接优化为基本数据类型int和long,所以是用“==”判断相等,结果才会为true。

为了保险起见,当判断封装类变量的数值相等时,最好直接取出数值来进行“==”判断,或者使用equals方法,即

lg1.equals(lg2)

像这些小细节,如果不搞清楚,说不定什么时候就造成*烦。

细节决定成败,Java编程中还有很多需要注意的细节,这里只探讨一二。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

651

2023.06.15

java流程控制语句有哪些
java流程控制语句有哪些

java流程控制语句:1、if语句;2、if-else语句;3、switch语句;4、while循环;5、do-while循环;6、for循环;7、foreach循环;8、break语句;9、continue语句;10、return语句。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

453

2024.02.23

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

725

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

441

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

426

2023.08.02

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号