• 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 整型变量

    整型变量

    1. public class HardStudy {
    2. public static void main(String[] args) {
    3. int a = 10;
    4. System.out.println(a);
    5. }
    6. }

    代码结果:

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

    代码结果:

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

                                                                        代码报错

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

    请再次把 Java yyds 打在公屏上

     注意事项:

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

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

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

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

    长整型变量

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

    代码结果:

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

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

    代码结果:

     注意事项:

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

    短整型变量

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

    代码结果:

     注意事项:

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

    字节型变量

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

    代码结果:

     注意事项:

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

    2.2 浮点型变量

    单精度浮点型

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

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

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

    双精度浮点型

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

    代码结果:

     注意事项:

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

    2.3 字符型变量

    1. public static void main(String[] args) {
    2. char a = 'Y';
    3. System.out.println(a);
    4. char b = '李';
    5. System.out.println(b);
    6. char c = 99;
    7. System.out.println(c);
    8. char d = 67;
    9. System.out.println(d);
    10. }

    代码结果:
     

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

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

    注意事项: 

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

    2.4 布尔型变量

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

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

    1. public static void main(String[] args) {
    2. boolean a = true;
    3. System.out.println(a);
    4. boolean b = false;
    5. System.out.println(b);
    6. }

    代码结果:

     注意事项:

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

    3.字符串类型

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

    代码结果:

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

    1. public static void main(String[] args) {
    2. int x = 10;
    3. int y = 20;
    4. System.out.println("x: "+x +" y:"+y);
    5. System.out.println("x: "+x+y);
    6. System.out.println(x+y+"lilong");
    7. System.out.println(x + y);
    8. }

     代码结果:

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

    int转String

    把一个整数变成字符串

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

    代码结果:

    String转int

    把一个字符串变成整数

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

    代码结果:

    4.类型转换

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

    正确写法:

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

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

    代码结果:

    4.1 自动类型转换(隐式)

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

    例子:

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

    代码结果:

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

    4.2 强制类型转换(显示)

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

    代码结果:

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

    注意事项:

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

    5.类型提升

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

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

    正确写法1:

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

    正确写法2:

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

    代码结果: 

    byte类型该如何提升?

     可以看到编译器报错。

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

    正确写法:

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

    代码结果:
     

     类型提升小结:

    1. 不同类型的数据混合运算,范围小的会提升成范围大的.
    2. 对于short, byte这种比4个字节小的类型,会先提升成4个字节的int ,再运算.
  • 相关阅读:
    11.手写原生ajax
    Android Studio 生成开发库并打包maven包上传到私有服务器使用
    Git Commit Message规范
    【用户画像】Redis的简介和安装
    DPDK丢包那些事
    mysql基本命令
    Vue路由&&无痕浏览 - nodeJs环境搭建
    UE4两种点击空间UI弹窗的方式
    【算法练习Day1】二分查找&&移除元素
    学习笔记|模数转换器|ADC原理|STC32G单片机视频开发教程(冲哥)|第十七集:ADC采集
  • 原文地址:https://blog.csdn.net/m0_63033419/article/details/125986017