java 数据类型

一、java的基础数据类型

1. 内置数据类型(8种):

数据类型 默认值 长度(位)
byte 0 8
short 0 16
int 0 32
long 0 64
char   16
float 0.0 32
double 0.0 64
boolean false 1

 

2. 引用数据类型(2种):

  1)对象:默认值是null

  2)数组:默认值是null

 1 public class Test {
 2     static int a;
 3     static short b;
 4     static char c;
 5     static float d;
 6     static double e;
 7     static long f;
 8     static boolean g;
 9     static byte h;
10 
11     public static void main(String[] args) {
12         System.out.println("int类型的默认值:" + a);
13         System.out.println("short类型的默认值:" +b);
14         System.out.println("char类型的默认值:" +c);
15         System.out.println("float类型的默认值:" +d);
16         System.out.println("double类型的默认值:" +e);
17         System.out.println("long类型的默认值:" +f);
18         System.out.println("boolean类型的默认值:" +g);
19         System.out.println("byte类型的默认值:" +h);
20     }
21 }
输出为:
int类型的默认值:0 short类型的默认值:0 char类型的默认值: float类型的默认值:0.0 double类型的默认值:0.0 long类型的默认值:0 boolean类型的默认值:false byte类型的默认值:0

二、自动类型转换

取值范围小的可以自动转为取值范围大的类型,反之不可,但可以用强制类型转换,如

       char c1='a';//定义一个char类型

       int i1 = c1;//char自动类型转换为int

1.对于byte,short,char,int,long类型: 

a)在+-*/%运算中:

当两个操作数中没有long类型时,两个操作数中非int类型会先自动转换为int类型,再参与运算,返回结果为int;

当两个操作数中含有long类型时,两个操作数中非long类型会自动转换为long类型,再参与运算,返回结果为long;

b).在自加和自减运算中,操作数的类型是什么就是什么,不会发生转化。

2.对于float,double两个浮点数据类型与整型数据类型的运算:

如果运算的操作数含有float或者double类型的,其他类型自动转化为float或double类。

 1 public class Test {
 2     public static void main(String[] args) {
 3        byte a = 1;
 4        int b = 1;
 5        long c = 1;
 6        float d = 1.0f;
 7        double e = 1.0;
 8        //等号右边的变量类型范围大于左边的变量类型,编译没错
 9        b = a;
10        b = b + 1;
11        b = 2 * a;
12        c = a + b;
13        d = c + b;
14        a++;
15        b++;
16         //等号右边的变量类型范围小于左边的变量类型,编译出错
17        //以下代码是错的!
18        a = b;
19        a = a + 1;
20        a = 2 * b;
21        b = c + 1;
22        d = e;
23     }
24 }

三、float与double使用的注意点

1.float类型的定义

 //准确定义
 float f = 1.66f;  //直接定义float型
 float f1 = (float)3.13;  //double型强制转float型
 float f3 = 1;  //int型自动转float型
 //错误定义
 float f2 = 1.66;  //double无法转float型,报错
          

2.float类型与double型运算,准确度不高

System.out.println(2.0-1.9);  //输出0.10000000000000009
System.out.println(2.0f-1.8f);  //输出0.20000005

解决方法:用BigDecimal来转化,但要注意:BigDecimal的入参要为String类型,如果入参还是float或者double类型,不能解决问题!

        BigDecimal num1 = new BigDecimal(Double.toString(2.0));
        BigDecimal num2 = new BigDecimal(Double.toString(1.9));
        double result = num1.subtract(num2).doubleValue();
        System.out.println(result);
        BigDecimal num3 = new BigDecimal(Float.toString(2.0f));
        BigDecimal num4 = new BigDecimal(Float.toString(1.9f));
        float result1 = num3.subtract(num4).floatValue();
        System.out.println(result1);   
原文地址:https://www.cnblogs.com/ldn1230/p/10949410.html