`
ray_yui
  • 浏览: 220603 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java高质量代码之 — 数据类型

    博客分类:
  • Java
阅读更多

前言:由于上一个星期工作繁忙,利用上下班和晚上睡前空余的时间拜读了秦小波老师的《改善Java程序的151建议》,感觉廓然开朗,注意到了很多平时在编写代码中并不会注意的问题,甚至感觉自己对Java只是略懂皮毛,不足以登大雅之堂,特此与读者分享读书笔记,以下内容摘自《改善Java程序的151建议》一书和笔者的理解


Java高质量代码系列文章
      面向对象篇:http://ray-yui.iteye.com/blog/1926984
      数据类型篇:http://ray-yui.iteye.com/blog/1927251
          字符串篇:http://ray-yui.iteye.com/blog/1927647
      数组与集合(1):http://ray-yui.iteye.com/blog/1928170
      数组与集合(2):http://ray-yui.iteye.com/blog/1930155
      枚举与注解:http://ray-yui.iteye.com/blog/1931408
      泛型与发射:http://ray-yui.iteye.com/blog/1933127
                  异常:http://ray-yui.iteye.com/blog/1938946
                      杂:http://ray-yui.iteye.com/blog/1942591


在Java当中有8种基本数据类型,分别是byte,char,short,int,long,float,double,boolean还有其对应的封装类型Byte,Character,Short,Integer,Long,Float,Double,Boolean,那我们究竟对他们有多少的了解呢?


1.用偶判断,不用奇判断
      在Java中可以使用取余的方式来进行奇数还是偶数的判断,请看以下代码

public static void main(String[] args) {
		int num = -1;
		System.out.println(num % 2 == 1 ? "奇数" : "偶数");
		// 输出结果为偶数
	}


      从上面代码中,-1怎么可能是偶数呢?首先我们就需要了解Java是如何取余的

public static int remainder(int dividend, int divisor) {
		return dividend - dividend / divisor * divisor;
	}


      现在一切就明了了,-1的运算结果还是-1,以后记得写成num % 2 == 0


2.对精确货币计算使用BigDecimal类型
      在使用货币计算时,我们首先想到的是使用double类型,但在计算机世界中,浮点类型有可能是不准确的,他只能无限的接近某一个值,而不会完全精准,这是因为二进制的原因,就像用10进制无办法表示10 / 3一样,所以对于精确的货币计算,应该使用BigDecimal类型,而且BigDecimal和数据库中的NUMBER和DECIMAL类型很好的匹配


3.注意类型的默认转换
     在Java当中,当大的类型与小类型进行运算时,该运算会自动提升为大类型,这种转换成为加宽类型,例如long类型和int类型进行运算后会自动提升为long类型,请观察一下代码

public static void main(String[] args) {
		// 2147483647为int最大值
		long num = 2147483647 + 1;
		System.out.println(num);
		// 运行结果为 -2147483648
	}


     以上代码中,2147483647为int类型的最大值,我使用long类型来接受int最大值+1应该是没问题的,但事实并不是如此,这是因为在Java中是先运算再进行类型转换的,二者都是int类型,所以运算结果也应该是int类型,所以超出了int类型的最大范围,此时修改为2147483647L + 1 就能成功运算


4.数值类型最大值应使用Java提供常量
      在3的例子当中,我们使用了int的最大值2147483647,当然读者可能是有超人的记忆把int的最大值和最小值记住了,但short类型呢?long类型呢?所以我们应该使用Java自带的常量来获取数值类型的最大值和最小值,请看以下代码

public static void main(String[] args) {
		// int类型最大值
		int maxInt = Integer.MAX_VALUE;
		// int类型最小值
		int minInt = Integer.MIN_VALUE;
		// long类型最大值
		long maxLong = Long.MAX_VALUE;
		// long类型最小值
		long minLong = Long.MIN_VALUE;
		// short类型最大值
		short maxShort = Short.MAX_VALUE;
		// short类型最小值
		short minShort = Short.MIN_VALUE;

	}


5.注意数值的边界判断
      请来观看下面的代码

public static void main(String[] args) {
		test(Integer.MAX_VALUE + 1);
	}

	public static void test(int num) {
		if (num < 2000) {
			System.out.println("执行");
		}
	}


      test方法的逻辑非常简单,若然int类型的数值少于2000就执行,当我使用int类型的最大值+1时,就因为类型越界而变成int的最少值,所以满足少于2000的条件从而执行方法,所以对于严谨的程序,应该进行 业务/正最大/负最小 的边界判断,特别是从前台接受过来的值


6.提防包装类的null值
      包装类型是基本类型的包装类,当使用包装类型时,其实就生成了对象,当然对象是允许为null的,所以需要注意包装类型的!null判断


7.理解基本类型-->包装类型装箱拆箱过程
      以下为Intger类型例子,Double和Float等同理
      从基本类型-->包装类型是调用包装类型的valueOf()方法来进行转换
      从包装类型-->基本类型是调用包装类型的intValue()方法来进行转换


8.优先选择基本类型
      我们都知道,基本类型是存在栈的,而包装类型因为是类,对象,所以是存在堆中,在处理速度上,由于基本类型是原生类型,所以速度更快,其实换个思维也可以思考到,包装类型封装了属性和方法,生成的速度会比基本类型慢,而且当包装类型进行运算时,都将调用intValue()方法然后再调用valueOf()方法封装回包装类型,所以在可行的情况下,优先选择基本类型,但在特定的框架例如Hibernate中,推荐使用包装类型


总结:
      笔者在本文章中只从《改善Java程序的151建议》中提取部分进行归纳性叙述,推荐各位读者购买这本书,该书不仅从事例中学习,而且涉及到原理,底层的实现,不仅告诉你应该怎么做,还告诉你为什么要这样做.
19
8
分享到:
评论
6 楼 longshaojian 2013-08-29  
奇偶判断

num & 1 == 1 ? "奇数" : "偶数"
5 楼 james.zc 2013-08-20  
这个有必要顶下
4 楼 huangyuyun2002 2013-08-20  
都是细节的用法,很好。
3 楼 raph_java 2013-08-20  
num % 2 == 0 亮了
2 楼 jimode2013 2013-08-20  
用偶判断,不用奇判断  这一点确实没有想到
1 楼 桃花源记 2013-08-20  
很不错,楼主快更

相关推荐

    编写高质量代码 改善Java程序的151个建议 PDF高清完整版

    《编写高质量代码 改善Java程序的151个建议》是一本专注于提升Java编程质量的专业书籍。书中详细列举了151条实用的建议,旨在帮助开发者编写出更高效、可读性更强且易于维护的Java代码。以下是对这些建议的详细解读...

    高质量java编程

    1. **基础语法**:书中详细介绍了Java的基础语法,包括数据类型、变量、运算符、流程控制(如if-else,switch,for,while等)、方法定义与调用等,这些都是构建任何Java程序的基础。 2. **面向对象编程**:Java是...

    高质量Java程序设计 源代码

    《高质量Java程序设计》是一本深入探讨如何编写高效、可靠且易于维护的Java代码的书籍。源代码提供了书中实例的实现,是理解理论知识并进行实践操作的重要资源。以下是基于这个主题的一些Java编程核心知识点: 1. *...

    java变量数据类型运算符

    在Java编程语言中,变量是存储数据的容器,而数据类型则是定义变量可以存储哪...在实际编程中,开发者需要根据需求选择合适的数据类型,合理使用运算符,以及设计符合面向对象原则的类和对象,以实现高质量的软件系统。

    java、mysql以及oracle数据类型对照表

    在IT行业中,数据库管理和编程是...总的来说,掌握Java、MySQL和Oracle之间的数据类型对应是提升开发效率和代码质量的关键。通过深入理解和运用这些知识,开发人员能更好地设计和实现跨平台的数据存储和检索解决方案。

    java-标识符-关键字-数据类型课件.pptx

    Java 标识符、关键字、数据类型 Java 中的标识符是指在 Java 中命名类、接口、变量、常量...Java 中的标识符、关键字、数据类型都是 Java 编程的基础知识,需要遵循一定的命名规则和定义格式,以便写出高质量的代码。

    JAVA数据类型转换.pdf

    ### JAVA数据类型转换详解 #### 一、引言 在Java编程中,数据类型转换是一项基本且重要的技能。本文档将详细介绍Java中的数据类型转换,包括简单数据类型之间的转换、字符串与其他数据类型的转换以及一些实用的...

    高级JAVA源代码

    同时,了解不同类型的异常以及自定义异常的创建也是提高代码质量的重要环节。 IO流是Java中处理输入输出的重要部分。资料可能会涵盖字节流、字符流、缓冲流、对象序列化等主题。同时,NIO(非阻塞I/O)是Java 1.4...

    Java 基本知识之基本数据类型

    在实际编程中,理解并灵活运用这些基本数据类型是提高代码质量的基础。在面试或编码测试中,掌握它们的细节和使用场景往往会被视为衡量开发者基础知识是否扎实的重要指标。因此,深入理解并熟练运用Java的基本数据...

    Java学习部分代码

    1. **基础语法**:Java的基础包括数据类型(如整型、浮点型、字符型和布尔型)、变量、运算符、流程控制(如if语句、switch语句、for循环、while循环)以及方法的定义与调用。这些是编写任何Java程序的基石。 2. **...

    第02章 Java编程基础 04 基本数据类型转换

    总之,理解并掌握Java中的基本数据类型转换对于编写高质量的Java代码至关重要。无论是自动类型转换、强制类型转换,还是装箱与拆箱,都需要根据实际需求灵活运用,同时注意可能产生的数据精度损失和溢出问题。通过...

    Java初级课堂代码

    初学者首先要掌握Java的基础语法,包括变量、数据类型、运算符、流程控制语句(如if条件判断、for循环、while循环)等。 2. **类与对象**:Java的核心是面向对象编程,因此了解如何定义类,创建对象,以及使用类的...

    Java工程师不得不看的几千份代码

    1. **基础语法与最佳实践**:Java语言的基础是所有Java程序员的基石,包括变量、数据类型、控制结构(如if-else、switch-case、循环)、类、对象、接口等。代码中可能包含了这些基础知识的最佳实践示例,帮助开发者...

    java代码生成器(mysql版)

    Java代码生成器(MySQL版)是...总之,Java代码生成器(MySQL版)通过自动化的方式帮助开发者快速构建基于MySQL的Java应用程序,减少重复劳动,提高代码质量,让开发者更专注于业务逻辑的实现,而不是基础架构的搭建。

    java实用代码源代码

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。"java实用代码源代码"这个标题表明我们即将探讨的是实际应用中的Java编程代码,这些代码可能涵盖各种功能和应用场景,旨在提高开发...

    8种常见的Java不规范代码

    在日常的软件开发工作中,编写高质量、高效率的代码至关重要。良好的编码习惯不仅能提升个人技术素养,还能增强团队协作的效率与成果。本文将探讨八种常见的Java不规范代码,帮助开发者规避这些问题,从而提高代码...

    Java代码设计规范

    Java代码设计规范是编程实践中非常重要的一...遵循这些Java代码设计规范,可以帮助开发者写出更高质量的代码,同时提高团队合作的效率和项目的可持续发展。不断学习和实践这些规范,将成为提升个人专业素养的重要途径。

    编写高质量代码:改善Java程序的151个建议pdf和源码 高清

    《编写高质量代码:改善Java程序的151个建议》是一本专为Java开发者准备的实战指南,旨在提升代码质量并帮助程序员从初级迈向高级。这本书涵盖了从基础到高级的各种编程实践,通过151个具体的建议,为读者提供了一个...

    java代码审查.pdf

    通过以上的知识点解读,可以看出【部分内容】中涉及了Java编程中的多种概念和最佳实践,这些都是进行有效代码审查和编写高质量代码的基础。从代码审查的角度来看,理解并掌握这些知识点对于提高软件质量和提升开发...

    疯狂java讲义第二版代码

    1. **Java基础**:从基础的变量、数据类型、流程控制语句到类与对象的创建,这些代码实例展示了Java的基础语法和面向对象特性。学习者可以通过运行和修改这些代码,加深对概念的理解。 2. **异常处理**:Java的异常...

Global site tag (gtag.js) - Google Analytics