ctyzxlb

什么是变量?

变量就是在程序执行的过程中,在某个范围内其值可以发生改变的量。

java层面:
1、你想要定义变量,得有个限定条件,如何限定呢?

       数据类型
2、将来我们参与运算的时候,不能直接拿内存中的空间去参与运算。应该给这个空间起个名字。

       变量名
3、仅仅只拿到这个空间,但是里面没有值,这样也是不能够参与运算的,我们得先赋值,才能参与运算。

       初始化值

变量的定义格式:

                     1. 数据类型   变量名=初始化值;(格式是固定的,记住格式,以不变应万变。)

                     2.数据类型 变量名;

                      变量名 = 初始化值;

                     推荐使用上面的定义变量格式

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。

数据类型的分类:

 

 

 数值类型的表数范围:

 

 

  类型 占用储存空间 表数范围

整数

类型

byte(字节变量) 1字节 -2^7~2^7-1//-128~127
short(短整型) 2字节 -2^15~2^15-1
int(整型) 4字节 -2^31~2^31-1
long(长整型) 8字节 -2^63~2^63-1

浮点

类型

float(单精度浮点型) 4字节 -3.403*10^38~3.403*10^38(特殊)
double(双精度浮点型) 8字节 -1.798*10^308~1.798*10^308(特殊)

字符

类型

char 2字节  

布尔

类型

boolean 1字节  

原理:

例如

byte型:1byte=8bit

                                                                                                                                                                

                       byte
               
                       8bit

                                                                   

其中每个bit有两个值0和1,而且第一位是符号位(不参与运算) ,所以范围是-2^7~2^7-1

 

注意:

1.定义long类型的变量时,末尾要加上L或者l

推荐使用L

2.整数默认类型:int

   小数默认类型:double

3.定义float类型的变量,末尾要加上F或者f

推荐使用F

 

程序举例:

public classDataType{

    public static void main(String[] args){

//定义变量的格式:数据类型  变量名=初始化值

//定义一个字节变量

        byte b=10;

        System.out.printIn(10);//输出整型常量10

        System.out.printIn(b);//输出变量b的值为10

//定义一个短整型变量

        short s=100;

        System.out.printIn(s);

//定义一个整型变量

        int i=1000;

        System.out.printIn(i);

//定义一个长整型变量

        long l=1000000000000000000000L;

        System.out.printIn(l);

//定义一个单精度浮点型变量

        float f = 12.34F;
        System.out.println(f);

//定义一个双精度浮点型变量

        double d = 12.34;
        System.out.println(d);

//定义一个字符类型变量

        char c1 = \'a\';
        char c2 = \'b\';
        char c3 = \'0\';
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);

//定义一个布尔类型变量

        boolean b1 = true;
        boolean b2 = false;

        System.out.println(b1);
        System.out.println(b2);

    }

}

 

数值型精度排序(由小到大):byte<short<int<long<float<double    

 

 

使用变量注意事项:

1.作用域:变量定义在哪一级的大括号内,哪个大括号的范围就是这个变量的作用域。

相同的作用域内不能定义两个同名变量。

2.若方法内部变量没有赋予初始化值,则不能直接使用(输出)。你只需要在使用之前赋值就可以了,不一定非要在定义的时候给。

3.每一行上建议只定义一个变量。

 

+  在Java中是一个运算符,用于数据的加法。

一般来说,我们在运算的时候,要求参与运算的数据类型要保持一致

 

基本数据类型之间存在默认转换和强制转换。

boolean类型不能转换为其他数据类型

 

默认转换与强转换

默认转换(由小到大)

byte,short,char➡int➡long➡float➡double

byte,short,char互相之间不转换,他们参与运算首先转化为int类型。

强制转换

目标类型 变量名=(目标类型)(被转换的数据),,如果被转换的数据是一个变量(不是表达式)的时候可以不加括号。

例如:

        int i=1000;

        byte b=10;

//      byte c = i+b;

        byte c =(byte)(i+b);

口诀:
byte,short,char一律自动转换为int
小的用大的接收不用强转
大的用小的接收需要强转

 

强制类型转换的原理

 

 

 如图因为位数不够,计算机在做加法之前会先把byte a 补全

 

 

 之后会进行相加

 

 

 加完之后红框内的数据会被计算机截掉

 

所以说强制类型转换有精度损失

 

1、思考题:

1) 请问以下的代码有没有问题

double    d=12.34;         √

float        f=d;                  ×   double➡float需要强制转换

2)看程序说明有没有问题

float        f1=(float)12,34;    √     f1是通过double类型强制转换到float

float        f2=12,34F;           √     f2是本身就是float类型

2、面试题

byte b1=3,b2=4,b;

b=b1+b2;   ×

b=3+4;

那一句编译失败?为什么?

**变量相加,首先看类型问题,最终把结果的赋值也会去考虑类型问题。

**常量之间相加,首先会做加法运算,然后看这个结果是不是在接收数据类型的范围内,如果在,就直接赋值,不会报错。

因为byte,short,char相互之间不转换,他们参与运算首先转化为int类型。

b=b1+b2;   ×   ➡    b=(byte)(b1+b2);   √

 

3、思考题

byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

有问题,因为byte的精度范围是-128~127。

可以进行强转,我们知道计算机通过二进制补码进行运算。

整数默认是int类型,占4个字节

00000000   00000000    00000000    10000010      这就是130的原码、反码和补码。

强制类型转换(做截取操作)

10000010(补码)

已知补码求原码

            符号位            数值位
补码:       1               0000010
反码:       1               0000001
原码:       1               1111110

因为最高位是符号位不参与运算,所以把原码1111110换算成十进制。
64 + 32 + 16 + 8 + 4 + 2 = 126   ➡    -126

 

分类:

技术点:

相关文章: