【Java SE】居然有这么详细的数据类型讲解,我明天就能学会

目录

1.数据类型

2.变量

2.1 整型变量

整型变量

长整型变量

短整型变量

字节型变量

2.2 浮点型变量

单精度浮点型

双精度浮点型

2.3 字符型变量

2.4 布尔型变量

3.字符串类型

4.类型转换

4.1 自动类型转换(隐式)

4.2 强制类型转换(显示)

5.类型提升


1.数据类型

数据类型分为基本数据类型和引用数据类型(引用数据类型后面数组的文章会讲)

基本数据类型有4类、8种。

  1. 4类:整型、字符型、浮点型以及布尔型。
  2. 8种:如下表

注意:Java数据类型是不分计算器是32位还是64位的,所以不论是32位还是64位都是上图中的字节数。

请把 Java yyds 打在公屏上。

2.变量

变量是用不同数据类型定义出来的

2.1 整型变量

整型变量

public class HardStudy {
    public static void main(String[] args) {
        int a = 10;
        System.out.println(a);
    }
}

代码结果:

 public static void main(String[] args) {
        int a = 10;
        System.out.println(Integer.MAX_VALUE);
 }

代码结果:

注意在Java中所定义的变量如果没有初始化,那么编译不能通过

                                                                    代码报错

 再使用前一定要初始化,否则无法使用,从这里可以看出Java很安全。

请再次把 Java yyds 打在公屏上

 注意事项:

  1. int不论在何种系统下都是4个字节
  2. 如果没有合适的初始值,可以设置为0
  3. 在给变量设置初始值时,值不能超过int的表示范围,否则会导致溢出4.变量在使用之前必须要赋初值,否则编译报错
  4. int的包装类型为Integer(后面的文章会讲)

整形的最大值是 2147483647,但是如果赋值是超过了这最大值会怎么样呢?

 可以看到代码报错,并且输出后提升了哪里错了。

Java 是世界最好的语言!!!

长整型变量

public static void main(String[] args) {
        long a = 100L;//大写L表示这是一个长整型变量
        System.out.println(a);
}

代码结果:

 如果写的是一个小写的l,也不会报错,只不过会被解析成整型。

 public static void main(String[] args) {
        long a = 10L;
        System.out.println(Long.MAX_VALUE);//输出长整型的最大值
        System.out.println(Long.MIN_VALUE);//输出长整型的最小值
 }

代码结果:

 注意事项:

  1. 长整型变量的初始值后加L或者I,推荐加L
  2. 长整型不论在那个系统下都占8个字节
  3. 长整型的表示范围为: -2^63~2^63-1 
  4. long的包装类型为Long

短整型变量

  public static void main(String[] args) {
        short sh = 100;
        System.out.println(sh);
        System.out.println(Short.MAX_VALUE);//short最大值
        System.out.println(Short.MIN_VALUE);//short最小值
  }

代码结果:

 注意事项:

  1. short在任何系统下都占2个字节
  2. short的表示范围为: -32768 - 32767
  3. 使用时注意不要超过范围(一般使用比较少)
  4. 4. short的包装类型为Short

字节型变量

 public static void main(String[] args) {
        byte yyds = 100;
        System.out.println(yyds);
        System.out.println(Byte.MAX_VALUE);//最大值
        System.out.println(Byte.MIN_VALUE);//最小值
 }

代码结果:

 注意事项:

  1. byte在任何系统下都占1个字节
  2. byte的范围是: -128 - 127.
  3. 字节的包装类型为Byte

2.2 浮点型变量

单精度浮点型

 如果按照上面的写法的话,123.123会被认为是一个双精度浮点型。而一个 float 是4个字节,double类型是8个字节,存不下,所以报错。

正确写法是强制类型转换成 float 或者在123.123后面加一个f。(大写或者小写的都可以)

   public static void main(String[] args) {
        float b = 123.123f;
        float c = (float)12.00;
   }

双精度浮点型

public static void main(String[] args) {
        double yyds = 123.123;
        System.out.println(yyds);
        System.out.println(Double.MAX_VALUE);//最大值
        System.out.println(Double.MIN_VALUE);//最小值
}

代码结果:

 注意事项:

  1. double在任何系统下都占8个字节
  2. 浮点数与整数在内存中的存储方式不同,不能单纯使用2^n的形式来计算
  3. double的包装类型为Double
  4. double类型的内存布局遵守IEEE 754标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

2.3 字符型变量

 public static void main(String[] args) {
        char a = 'Y';
        System.out.println(a);
        char b = '李';
        System.out.println(b);
        char c = 99;
        System.out.println(c);
        char d = 67;
        System.out.println(d);
 }

代码结果:
 

在Java中使用的是Unicode字符集,这和C语言的ASCII是一样的。99表示小写c,67表示大写C,所以会输出小写的 c 和大写 C 。

一个汉字占两个字节,所以可以输出。

注意事项: 

  1. Java中使用单引号+单个字母的形式表示字符字面值.
  2. 计算机中的字符本质上是一个整数.在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符.因一个字符占用两个字节, 表示的字符种类更多,包括中文.
     

2.4 布尔型变量

在 Java 中没有所谓的0为假,非0为真;而是真只能是true,假只能是flase。

 可以看到编译器提示错误。

public static void main(String[] args) {
        boolean a = true;
        System.out.println(a);
        boolean b = false;
        System.out.println(b);
}

代码结果:

 注意事项:

  1. boolean类型的变量只有两种取值, true表示真, false表示假.
  2. Java的boolean类型和int不能相互转换,不存在1示true, 0表示false这样的用法.

3.字符串类型

  public static void main(String[] args) {
        String arr1 = "Hello";
        String arr2 = "World";
        System.out.println(arr1 + arr2);//arr1+arr2是拼接的意思
    }

代码结果:

在有些情况下,需要将字符串和整型数字之间进行转换。

 public static void main(String[] args) {
        int x = 10;
        int y = 20;
        System.out.println("x: "+x +" y:"+y);
        System.out.println("x: "+x+y);
        System.out.println(x+y+"lilong");
        System.out.println(x + y);
    }

 代码结果:

 当字符串和整数在一起使用+号的时候,就是个拼接的意思。

int转String

把一个整数变成字符串

  public static void main(String[] args) {
        int i = 100;
        String str = i+"";
        System.out.println(str);
  }

代码结果:

String转int

把一个字符串变成整数

  public static void main(String[] args) {
        String str = "123456";
        int i = Integer.parseInt(str);
        System.out.println(i+1);
  }

代码结果:

4.类型转换

 int 是4个字节,long是8个字节;空间不够,无法赋值给num。

正确写法:

   public static void main(String[] args) {
        int num = 1;
        long len = 2L;
        num = (int)len;
        System.out.println(num);
        int x = 10;
        long y = 20L;
        y = x;
        System.out.println(y);
    }

可以强制类型转换或者是将小字节数的赋给大字节数的。

代码结果:

4.1 自动类型转换(隐式)

自动类型转换的特点是,数据范围小的转为数据范围大的是会自动进行。

例子:

 public static void main(String[] args) {
        int num = 100;
        long sum = 200L;
        sum = num;
        System.out.println(sum);
 }

代码结果:

 编译器会自动将int转化成long输出。

4.2 强制类型转换(显示)

 public static void main(String[] args) {
        int Eat = 100;
        long Sleep = 200L;
        Eat = (int)Sleep;
        System.out.println(Eat);
 }

代码结果:

 将范围小的转为范围大的是必须要强制类型转化,不然会报错。

注意事项:

  1. 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型
  2. 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失
  3. 将一个字面值常量进行赋值的时候, Java会自动针对数字范围进行检查
     

5.类型提升

不同类型的数据之间相互运算时,数据小的类型会被提升到大的。

 Code会被提升成long类型,计算的结果也是long类型,int只有4个字节,存不下所以会报错。

正确写法1:

public static void main(String[] args) {
        int Code = 100;
        long Play = 200;
        int Good = (int)(Code + Play);
        System.out.println(Good);
}

正确写法2:

public static void main(String[] args) {
        int Code = 100;
        long Play = 200;
        long Good = Code + Play;
        System.out.println(Good);
}

代码结果: 

byte类型该如何提升?

 可以看到编译器报错。

  1. byte和byte都是相同类型,但是出现编译报错.原因是,虽然a和b都是byte,但是计算a+ b会铣将a和b都提升成int,再进行计算,得到的结果也是int, 这是赋给C,就会出现上述错误.
  2. 由于计算机的CPU通常是按照4个字节为单位从内存中读写数据.为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算

正确写法:

public static void main(String[] args) {
        byte num = 10;
        byte len = 20;
        int sum = num + len;
        System.out.println(sum);
}

代码结果:
 

 类型提升小结:

  1. 不同类型的数据混合运算,范围小的会提升成范围大的.
  2. 对于short, byte这种比4个字节小的类型,会先提升成4个字节的int ,再运算.
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

与大师约会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值