Java 常用数据类型(总结)

Java 常用数据类型(总结)

  • 本文表格数据主要来源 《Java核心技术第10版(套装共2册)》-- 作者:[美]凯S.霍斯特曼,霍斯特曼,科内尔 -- 译者:陈昊鹏等

  • 写法:-32_768 即:-32768,其它同理。

8 大基本数据类型

在 Java 中,一共有 8 种基本类型。
其中有 4 种整型、2 种浮点类型、char 字符类型和 boolean 类型。
基本数据类型进行 加减乘除 时,会自动转换到 范围大的数据类型,如 double/int = double。
两个相同类型的数据计算,得到 另一种数据类呢 ?
如 double d = 1/2,结果是 0.0,不是 0.5,而 double d = (double)1/2,结果才是 0.5。

自动类型转换(不丢失精度,隐式类型转换):低精度转换到高精度,int -> long; float -> double。

强制类型转换(丢失精度,显式类型转换):在 变量 或 表达式 前加上 ([类型])即可。

类型转换规则:

  • byte、short、char 之间不会自动相互转换。
  • boolean 不参与计算。
  • 自动提升,表达式结果自动转换为操作数中最大的类型。
整型

没有小数,允许是负数

类型大小取值范围是否有符号
byte1 字节-128 ~ 127true
short2 字节-32_768 ~ 32_767true
int4 字节-2_147_483_648 ~ 2_147_483_647(-21 亿+ ~ 21 亿+)true
long8 字节-9_223_372_036_854_775_808 ~ 9_223_372_036_854_775_807true

注意了:long 类型的数据在赋值时,需要加上后缀 L/l,选一个,不然会默认是 int 类型。
int 的 范围在 -2_147_483_648 ~ 2_147_483_647,下面的代码中给 num4 赋值大于 int 范围时便报错。
下文中的 32_767 和 32767 是同一个意思,编译器在编译时会去除 下划线 的。

@Test
public void aVoid1 () {
    byte num1 = 127;
    short num2 = 32_767;
    int num3 = 2147483647;
    long num4 = 9_223_372_036_854_775_807L;
    
    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
    System.out.println("num3 = " + num3);
    System.out.println("num4 = " + num4);
}
浮点型
类型大小取值范围是否有符号
float4 字节+/- 3.402_823_47E+38F (有效位数为 6~7 位)true
double8 字节+/- 1.797_693_134_862_315_70E+308 (有效位数为 15 位)true

注意,赋值 double、float 时,默认都是将 double 数据赋予指定 变量的。
要指定是 float 类型需要在数据后加 F/f,那加上 D/d 就是指定为 double 类型了(默认就是了,基本不加)。
float 的精度难以满足实际需求,故很少使用。

几个特殊的浮点数值:

不能用 == 来判断变量是否等于 Double.NaN,认为是不相等的,但可以使用对应的 Double.isNaN 方法来校验。
而其他的两个 特殊浮点数可以用 == 来判断。因为所有非数值的数都是不相等的。

  • 正无穷大,Double.POSITIVE_INFINITY,1.0/0.0 时得到该值。(溢出)

  • 负无穷大,Double.NEGATIVE_INFINITY,-1.0/0.0 时得到该值。(溢出)

  • NaN,Double.NaN,计算 0.0、0.0 时得到该值。不是一个数。(出错)

@Test
public void aVoid2 () {
    
    float num1 = 56F;
    double num2 = 56;
    
    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
    
    double nan = Double.NaN;
    double positive_infinity = Double.POSITIVE_INFINITY;
    double negative_infinity = Double.NEGATIVE_INFINITY;
    
    boolean n1 = Double.isNaN(nan);
    System.out.println("nan =  Double.NaN ? " + n1);
    
    System.out.print("nan =  Double.NaN ? ");
    System.out.println(nan == Double.NaN);
    System.out.print("positive_infinity = Double.POSITIVE_INFINITY ? ");
    System.out.println(positive_infinity == Double.POSITIVE_INFINITY);
    
    System.out.print("negative_infinity = Double.NEGATIVE_INFINITY ? ");
    System.out.println(negative_infinity == Double.NEGATIVE_INFINITY);
    
}
char 类型

用来表示 Unicode 字符,用一个或两个 char 值来表示 一个 Unicode 字符。
char类型的字面量值要用单引号括起来,内容只能为一个字符,字符也可以换成 Unicode 编码,下面代码的结果是一样的。
强烈建议,不要用

@Test
public void aVoid3 () {
    
    char c1 = 'u';
    char c2 = '\u0075';
    
    System.out.println("c1 = " + c1);
    System.out.println("c2 = " + c2);
}
boolean 类型

只有两个值 true、false。用来判定逻辑条件。
注意,整型值和布尔值之间不能进行相互转换,即 x=0 不能转换为布尔值。

@Test
public void aVoid4 () {
    
    boolean x1 = true;
    boolean x2 = false;
    
    boolean x3 = 0 == 1;
    
    System.out.println("x1 = " + x1);
    System.out.println("x2 = " + x2);
    System.out.println("x3 = " + x3);
}

其他的 ‘数据类型’

这些 ‘数据类型’ 是一个 Java 对象,并不是一种新的 Java 类型。

String 类

也可以说是 字符串 类型。
String 是一个类,没有 加减乘除,只有 +(拼接),即 “123” + 7 = “1237”,其他的同理。
对应的,不能比较,也不能更改,有对应的 工具类用来操作 String 类。
StringBuilder、StringBuffer 就是常用的工具类。

@Test
public void aVoid5 () {
      
    String str = "hhhhhh";
    String str1 = "ggggg";
    String str2 = "123";
    int str3 = 5;
    
    StringBuilder str6 = new StringBuilder(str1).append(str);
    StringBuffer str7 = new StringBuffer(str2).append(str3);
    
    System.out.println("str = " + str);
    System.out.println("str.getClass() = " + str.getClass());
    System.out.println("str1 + str = " + str1 + str);
    System.out.println("str2 + str3 = " + str2 + str3);
    System.out.println("str6 = " + str6);
    System.out.println("str7 = " + str7);
}
大数值

这个我用的比较少,介绍短

有两个对象 BigInteger(大整数)、BigDecimal(大小数),同时 它们的父类 Number 也是 基本数据类型的父类。
是 double 的扩展,当一个大于 double 的数据要 算术运算 时,double 已经不能处理了,对每一个字符进行操作又太复杂。

java.math 包提供的 BigInteger 就是为了实现 大数字(大于 Double)运算的。
BigInteger 类除了基本的四则运算,还有模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作,功能十分丰富。

BigInteger

@Test
public void aVoid6 () {
    BigInteger bigInteger = new BigInteger("77");
    System.out.println("bigInteger = " + bigInteger);
    
    BigInteger bigA = new BigInteger("2435545434422445623443");
    BigInteger bigB = new BigInteger("2435522445623443");
    
    // +
    System.out.println(bigA.add(bigB));
    // -
    System.out.println(bigA.subtract(bigB));
    // *
    System.out.println(bigA.multiply(bigB));
    // /
    System.out.println(bigA.divide(bigB));
}

BigDecimal 类的四则操作与 BigInteger 类基本相同的,也提供有基本的数学计算。
最重要的是,BigDecimal 类的除法有一个非常重要的功能,可以自定义 要保留的小数位数 和 进位模式。
而 Math 类之中的 round()方法进行四舍五入操作过程之中,采用的是所有小数点全部进位,没有小数位,这样的做法是不可取的。

BigDecimal

@Test
   public void aVoid7 () {
      BigDecimal bigDecimal = new BigDecimal("88.8");
      System.out.println("bigDecimal = " + bigDecimal);
      
      BigDecimal big1 = new BigDecimal("09.65329888");
      
      System.out.println(Math.round(09.65329888));
      System.out.println(big1.divide(new BigDecimal(1), 2, BigDecimal.ROUND_UP));
      System.out.println(big1.divide(new BigDecimal(1), 1, BigDecimal.ROUND_UP));
      System.out.println(big1.divide(new BigDecimal(1), 5, BigDecimal.ROUND_UP));
      
   }

总的来说,大数值就是用来 运算大数据精密计算小数 的。

(二发)如果对你有帮助,点赞可好!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十⑧

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值