初识Java之数据类型与变量

发布于:2022-11-09 ⋅ 阅读:(7) ⋅ 点赞:(0) ⋅ 评论:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


初识Java之数据类型与变量

1.字面常量

📓常量字符串即程序运行期间,固定不变的量称为常量,例如:1个礼拜是7天,一年是12个月。

public class test {
    public static void main(String[] args) {
        System.out.println("hello world");
        System.out.println(100);
        System.out.println(3.14);
        System.out.println('A');
        System.out.println(true);
        System.out.println(false);
    }
}//其中:100 3.14 ‘A’ true/false都是常量,将其称为字面常量
  1. 字符串常量是用"“括起来的,比如"23456”, “hello”, “侬好”。
  2. 整型常量:程序直接写出来的数字(是没有小数点的),比如:100,231
  3. 浮点数常量:程序中直接写的小数,比如:3.14,5.22
  4. 字符常量:由单引号括起来的单个字符,比如:‘A’, ‘1’
  5. 布尔常量:只有两种结果,true或者false

📔注意:在java中,字符串,整型,浮点型,字符型以及布尔型都称为数据类型

2.数据类型

📒在java中数据类型主要分为两类:基本数据类型引用数据类型
📕基本数据类型又分为四类八种

  1. 四类:整型,浮点型,字符型以及布尔型
  2. 八种
    在这里插入图片描述

📕注意:
无论是16位还是32位操作系统,int都占4个字节,long占8个字节(说明java的移植性很强)
整型和浮点型都是带有符号的
整型默认int,浮点型默认double
字符串属于引用类型
我们拿int来举例(下图)

在这里插入图片描述

字节是计算机中表示空间大小的基本单位,常见的换算如下图🖊

在这里插入图片描述

3.变量

变量的概念:
地球无时无刻不在转动,一切都是在改变的,所以在Java中对于经常改变的内容就称之为变量。我们上面提到的数据类型就是用于定义不同种类的变量的。(变量分为基本变量和引用变量,我们先介绍基本变量)

语法格式为:数据类型 变量名=初始值

3.1整型变量

💼int long short

 //整型变量定义方式一
        int a=10;
        System.out.println(a);
        //整型变量定义方式二
        int b;
        b=10;
        System.out.println(b);
        //整型变量定义方式三
        int c;
        System.out.println(c);
        c=100;//这种定义方式是错误的,会出现Variable 'c' might not have been initialized报错,意思就是没有对进行初始化
1.整型无论在任何系统下都占4个字节
2.整型的范围是-2^312^31-1
3.Integer是int的包装类

int a=10;//定义一个值为10的整型变量
long b=20L;//为了区分整型和长整型,一般在long类型变量后加上L
1.长整型变量需要在初始值后加上L
2.长整型无论在任何系统下都占8个字节
3.长整型的范围是-2^63 ~ 2^63-1
4.长整型的包装类是Long


short a=10;
System.out.println(a);//10
1.短整型在任何系统下都是占2个字节
2.短整型的表示范围是-32768 ~ 32767
3.使用时注意不要超过范围
4.短整型的包装类型是Short
   

3.2字节变量

🧰byte

byte a=10;
System.out.println(a);
1.byte字节型在任何系统下都是占1字节
2.byte的范围是:-128127
3.byte的包装类型是Byte

3.3浮点型变量

🧳double and float

int i=1;
int j=2;
System.out.println(i/j);//结果会是0.5吗?
//不会,在java中,整数除整数会直接舍弃掉小数点后面的部分,所以这个答案是0

正确的做法是需要将被除数和除数都以小数的形式去执行
double i=1.0;
double j=2.0;
ystem.out.println(i/j);
1.double字节型在任何系统下都是占8字节
2.double的范围是:很大,一般不关注
3.double的包装类型是Double


float num=2.1f;
float qwe=3.7F;
System.out.println(num);
System.out.println(qwe);
1.float字节型在任何系统下都是占4字节
2.float的范围是:一般不关注
3.float的包装类型是Float
4.我们在提到浮点型时,一般直接考虑使用double,很少使用float

3.4字符型变量

📪char

char c1='A';
char c2='a';
System.out.println(c1);
System.out.println(c2);

int c3='A';
int c4='a';
System.out.println(c3);
System.out.println(c4);

char c5='哈';
System.out.println(c5);
1.char 可以存放整型或者字符以及汉字
2.大小写ascll码值相差32,在java中采用的是Unicode用于表示字符,所以一个字符占用两个字节
3.char类型在任何系统下占用2个字节
4.其范围是065535

在这里插入图片描述

3.5布尔类型变量

🧳boolean

boolean a=true;
System.out.println(a);
System.out.println("=================");//分割线
boolean b=false;
System.out.println(b);
1.boolean类型变量只有两种结果,true表示真,false表示假
2.并没有明确规定boolean占用几个字节,甲骨文公司的虚拟机实现中,boolean占用1个字节
3.boolean类型不能和int相互转换,不存在1表示true,0表示false这种说法
4.boolean的包装类为Boolean

4.类型转换

 public static void main(String[] args) {
        int a=10;
        long b=100L;
        b=a;//可以
        a=b;//不可以
        
    }
  

> a是整型,赋给长整型b,b可以接受,因为a的范围小,b的范围大,将a赋值给b时,会自动将a提升到long类型,然后赋值。
> 正因如此,long的范围比int范围大,会有数据丢失的风险,所以编译器直接报错
> 
> 所以根据转换的情况,Java中有两种类型转换,分为自动类型转换和强制类型转换

4.1自动类型转换(隐式)

🧃自动类转换:范围小的转给范围大的OK,范围大的转给范围小的,错误。
🥤特点:数据范围小的转为数据范围大的时会自动进行

public static void main(String[] args) {
        int a=100;
        long b=10L;
        b=a;//编译器会自动将a提升到long类型,然后赋值
       // a=b;//long的范围大,直接赋值给int类型,会出现数据丢失的情况
        
        float f=3.14f;
        double d=5.12;
        d=f;//编译器会转换为double,然后进行赋值
       // f=d;//double的范围大,直接赋值给float类型,会出现数据丢失的情况
        
        byte b1=100;
       // byte b2=257;//byte的范围是-128~127,257已经超过byte的范围了,所以会直接报错
    }

在这里插入图片描述

4.2强制类型转换(显式)

🍵强制类型转换:当进行操的时候,代码需要经过一定的格式处理,不能自动完成。
🧋特点:数据范围大的到数据范围小的

👉🏿代码如下(示例):

public class Main {
    public static void main(String[] args) {

        int a = 10;
        long b = 100L;
        b=a;//int-->long,数据范围小的到数据范围大的,隐式转换
        a=(int)b;//long-->int数据范围由大到小,需要强制类型转换,否则会出现编译错误

        float f=3.14F;
        double d=5.5;
        d=f;//float-->double,数据范围由小到大,隐式转换
        f=(float)d;//double-->float, 数据范围由大到小,需要强转,否则编译失败

        a=d;//类型不兼容,报错
        a=(int)d;//int没有double表示的范围大,需要强转,小数点之后全部抛弃

        byte b1=100;//这里100会被默认为int,没有超出byte的范围,隐式转换
        byte b2=(byte)257//257默认为int,超出了byte的范围,需要显式抓换,否则就会报错

        boolean flag=true;
        a=flag;//编译失败,类型不兼容
        flag=a;//编译失败,类型不兼容
    }
}

🤖注意事项
1.不同数字类型的变量之间赋值,表示范围小的类型能隐式转换成范围较大的类型
2.如果需要把范围大的类型赋给范围小的,需要强制类型转换,但是会出现精度丢失的情况
3.将一个字面值常量进行赋值的时候,Java会自动针对数字范围检查
4.强制类型转换不一定能成功,不想干的类型不能互相转换,例如boolean和int


4.3类型提升

🦖不同类型的数据之间进行运算,类型数据小的会被提升到数据类型大的


🐉整型和整型计算

public static void main(String[] args) {
        int a=10;
        long b=20;
        int c=a+b;//报错,因为b是长整型,直接赋给int类型会丢失数据
        long d=a+b;//编译成功,因为长整型d可以接收int类型
    }

在这里插入图片描述

🐲byte和byte计算


byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);

----在这里插入图片描述

不是byte和byte之间进行运算吗,关int什么事?🤔
答:这是因为计算的CPU都是按照4个字节为单位从内存中读写数据,例如byte和short这种低于4个字节的类型,会先提升到int。a+b会将a和b提升为int,再进行计算,得到的结果也是int,这就是为什么赋给c,就会出现报错。
正确的做法👇🏾

byte a=10;
byte b=20;
byte d=(byte)(a+b);
System.out.println(d);

在这里插入图片描述

🧠类型提升的小结:
1.不同类型的数据混合运算,范围小的会提升成范围大的
2.对于short,byte这种比4个字节小的类型,会先提升成4个字节的int,再进行运算


在上面我们不断提到了包装类这一个知识点。什么是包装类呢?🤔
答:为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。
在这里插入图片描述


🗣目前只需要记住有包装类这个概念,在后续知识点我们会持续跟进这一知识点

补充

🦎 String类定义字符串

 public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1+s2);
    }

在这里插入图片描述

🤥需要注意的是在java中:字符串+其他类型等于字符串
我们将上述的代码换一种方式输出出来


int a=1;
int b=2;
System.out.println("a = "+a);
System.out.println("b = "+b);
System.out.println("a+b="+a+b);
System.out.println("a+b="+(a+b));

在这里插入图片描述

大家注意看a+b的结果,a+b应该是等于3的,怎么第三行打印的会是12呢,这是因为在java中,'+'就相当于一个拼接符号,所以就输出12,只需要加上一个括号即可。

😈int转String

public static void main(String[] args) {
        int x=100;
        String str1=x+" ";
        System.out.println(str1);//方法1
        System.out.println("=================华丽的分割线");
        String str2=String.valueOf(x);//方法2
        System.out.println(str2);

    }

在这里插入图片描述

😈String转int

String str1="100";
int num=Integer.parseInt(str1);
System.out.println(num);
System.out.println("----------------华丽的分割线");
String str2="3435";
int qwe=Integer.parseInt(str2);
System.out.println(qwe);

在这里插入图片描述