再看Java基本类型

  Java中的基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。

数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型是有符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。

先看看各种类型所占的字节长度,long型和double型都占8个字节,float和int占4个字节,short和char占2个字节,byte占1个字节,boolean型的占一个bit。

Java中的基本类型又都有对应的一个封装类,如int所对应的Integer,适用于要求参数是对象的情况。

下面是一些使用基本类型需要注意的细节:

1.java的数值是有符号的,不要忘了还要考虑负数

判断一个数是不是奇数,

if( i % 2 == 1){

...

}

如果i是负数,i%2 的结果将是-1.应该是写成:

if( i%2 ! =0){

}

2.如果使用小数,默认的将是double类型,如果写成

float f = 1.24;

则会造成精度的丢失,应该显示的指明小数的类型

float f = 1.24f;

3.小数都可能会有精度的丢失,使用float和double做小数计算时可能都会碰到这样的问题,如果就是需要精确地计算,可以考虑使用BigDicemal,整型对应的是BigInteger。

System.out.println(3.0f - 1.0f);

System.out.println(3.0d - 1.0d);

float f = 20014999;

System.out.println(f);

float型所占用内存

double型所占用的内存

整数可以用二进制精确地表示 ,但小数就不一定了。关于小数到二进制的转换,可以参考:http://www.blogjava.net/jelver/articles/340038.html

下面是BigDicemal的一个封装类,来自网上,需要使用时直接调用方法即可。

import java.math.BigDecimal;
public class Utils {
 /** 精度 */
 private static final int DEF_DIV_SCALE = 10;
 /**
  * 加,BigDecimal用
  *
  * @param v1
  * @param v2
  * @return result
  */
 public static BigDecimal add(Object v1, Object v2) {
  BigDecimal result = null;
  BigDecimal b1 = new BigDecimal(v1.toString());
  BigDecimal b2 = new BigDecimal(v2.toString());
  result = b1.add(b2);
  return result;
 }
 /**
  * 减,BigDecimal用
  *
  * @param v1
  * @param v2
  * @return result
  */
 public static BigDecimal sub(Object v1, Object v2) {
  BigDecimal result = null;
  // if(v1!=null && v2!=null){
  BigDecimal b1 = new BigDecimal(v1.toString());
  BigDecimal b2 = new BigDecimal(v2.toString());
  result = b1.subtract(b2);
  // }
  return result;
 }
 /**
  * 乘,BigDecimal用
  *
  * @param v1
  * @param v2
  * @return result
  */
 public static BigDecimal mul(Object v1, Object v2) {
  BigDecimal result = null;
  // if(v1!=null && v2!=null){
  BigDecimal b1 = new BigDecimal(v1.toString());
  BigDecimal b2 = new BigDecimal(v2.toString());
  result = b1.multiply(b2);
  // }
  return result;
 }
 /**
  * 除,BigDecimal用
  *
  * @param v1
  * @param v2
  * @return result
  */
 public static BigDecimal div(Object v1, Object v2) {
  BigDecimal result = null;
  BigDecimal b1 = new BigDecimal(v1.toString());
  BigDecimal b2 = new BigDecimal(v2.toString());
  result = b1.divide(b2);
  return result;
 }
 /**
  *
  * @param v1
  * @param v2
  * @param scale
  * @return result
  */
 public static BigDecimal div(Object v1, Object v2, int scale) {
  BigDecimal result = null;
  if (scale < 0) {
   throw new IllegalArgumentException(
     "The scale must be a positive integer or zero");
  }
  BigDecimal b1 = new BigDecimal(v1.toString());
  BigDecimal b2 = new BigDecimal(v2.toString());
  result = b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
  return result;
 }
 public static BigDecimal round(double v, int scale) {
  if (scale < 0) {
   throw new IllegalArgumentException(
     "The scale must be a positive integer or zero");
  }
  BigDecimal b = new BigDecimal(Double.toString(v));
  BigDecimal one = new BigDecimal("1");
  return b.divide(one, scale, BigDecimal.ROUND_HALF_UP);
 }
}

  

时间: 2024-08-03 19:34:24

再看Java基本类型的相关文章

再看JAVA 设计模式-单例【转】

单例模式大家并不陌生,也都知道它分为什么懒汉式.饿汉式之类的.但是你对单例模式的理解足够透彻吗?今天我带大家一起来看看我眼中的单例,可能会跟你的认识有所不同. 下面是一个简单的小实例: [java] view plaincopyprint? //简单懒汉式 public class Singleton { //单例实例变量 private static Singleton instance = null; //私有化的构造方法,保证外部的类不能通过构造器来实例化 private Singleto

朝花夕拾——再看java类变量的初始化内幕

前面理解过java实例变量的初始化规则 朝花夕拾--看清java实例变量的初始化内幕 今天继续理清类变量的初始化顺序和细节,需要的朋友可以一起温习下. 类变量的初始化和实例变量的初始化很相似,相比实例变量初始化,少了构造器初始化的情况.大致只有:定义类变量时初始化和静态块中初始化两种情况. 规则:上述两种情况下,先对所有类变量进行申明并申请内存,在把赋值操作全部移动到静态块中进行初始化,顺序和源代码顺序一致. 首先理解下面代码 static double number = 100; 实际上JVM

再看Java之温故知新(体系篇)

一 数据类型 1.1 8种基本数据类型 1.2 引用数据类型 1.3 java内存机制 1.3.1 寄存器 1.3.2 栈 1.3.3 堆 1.3.4. 静态区/方法区 1.3.5. 运行时常量池(Runtime Constant Pool) 1.3.6 直接内存(Direct Memory) 二:面向对象思想 2.1封装 2.2 继承 2.3 多态 2.3.1 方法重载(Overloading) 2.3.2 方法覆盖(Overriding) 2.4 抽象 2.4.1 抽象类 2.4.2 接口

201671010111 2016-2017-2《Java程序设计》再看java

本周已经是学习Java的第二周了,课程进度已到第三章.那么我们对Java有了一个大概的认识.其语法近似于C语言,却又异于C语言.类似于C语言,却又有很多优越于C语言的地方.终于明白了课本第一章说java是一个优秀程序员的首选语言,作为一个优秀的程序员,使用java无疑是一个好的选择. 老师开始实行反转课堂教学法,一节理论课分为前一小时和后一小时.前一小时的时间用来做检测题,后一小时的时间则讲解这些题目.题目是老师涵盖了前三章的知识出的,检测到了前三章所有的重要知识点.一看到这些题目,内心就有一种

Java 把long 转换成 日期 再转换成String类型

1 /** 2 * 把long 转换成 日期 再转换成String类型 3 */ 4 public String transferLongToDate(String dateFormat, Long millSec) { 5 SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); 6 Date date = new Date(millSec); 7 return sdf.format(date); 8 } 上面是方法   第一个参数:da

九、java中类型信息

一.什么是类型信息? 简单的理解 ,“类型信息”就是一种机制, java中用这种机制来实现: 在程序运行过程中发现和使用“类”信息. java的类型信息主要有两块组成:RTTI和反射. 二.什么是RTTI? RTTI,全称是Run-Time Type Information  ,名字的含义是在运行时识别一个对象的类型. 1.Class对象 java中用一个特殊的对象Class, 通过它来执行其RTTI(这是一种思想, 用一个Class来表示所有类型对象,通过具体的Class里面的属性再来区分到底

Day 2 : 变量、JAVA基本类型、运算符和表达式-1

1. 变量 1.1. 什么是变量 在日常生活中,人们会用到大量数据,像去ATM机取款,首先,需要插入银行卡,这个过程其实就是ATM机的系统在获取银行卡号这个数据,而后,输入密码,这个过程也是在获取数据,也就是密码.在后续进行的业务处理中,像存钱.取钱.转帐汇款等等,银行卡号和密码会被反复的.频繁的使用, 那就需要一个存储这些数据的地方. 在软件系统中,是将数据存储在内存之中的,而对内存中的数据的引用就是变量,可以理解为变量就是内存中数据的代词. 简单说, 变量就是指代在内存中开辟的存储空间,用于

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

再学Java 之 Integer 包装类缓存

前言:本博文将涉及的Java的自动装箱和自动拆箱,可以参考 这篇文章 和 官方教程 ,这里不再赘述. 首先,先看一个小程序: public class Main { public static void main(String[] args){ Integer i1 = new Integer(1); Integer i2 = new Integer(1); System.out.println(i1 == i2); Integer i3 = 1; Integer i4 = 1; System.