Java变量和数据类型

Java变量和数据类型

1、变量的定义和使用

变量用一个符号来表示,在某一个变化的范围内,是一个变化的值。
变量的定义:

    int a;
    //int 变量允许存储的数据类型
    //a 表示变量的符号

变量的赋值:

 int a;
        a = 10;
        //此时打印 a 的值就是10
        System.out.println("a = " + a);
        a = 7;
        //此时打印 a 的值是7
        System.out.println("a = " + a);

在这里插入图片描述
变量可以在定义的同时初始化:
java中的 = 表示赋值

 int num = 7;

使用变量就是使用表示这个变量的符号,就是要使用这个符号代表的值
变量必须被定义且初始化之后才能使用

2、变量的形态

public class nums {
    static int b;//静态属性/类成员变量/类变量
    int c;//属性/成员变量/实例变量
    public static void main(String[] args) {
        int a;//局部变量
    }
}

3、变量的类型

四类八种
整形(byte int short long)
浮点型(float double)
字符型(char)
布尔型(boolean)

一个 int 变量占4个字节
在这里我们要明白 什么是字节?

字节是计算机中表示空间大小的基本单位 计算机使用二进制表示数据,8个二进制位(bit)表示一个字节 8GB内存就是指 8G个字节
1KB = 2^10 Byte= 1024 Byte
1MB = 2^10 KB
1GB = 2^10 MB
8GB = 8 * 2^30 Byte
也就是80多亿个字节 4个字节表示的范围是 -2^31 ~2 ^31-1
数字在计算机上都是以补码的形式存储,最小整数的补码:
1000 0000 0000 … 0000,那原码就是:1000 … 0000,负数的补码就是该数的绝对值的原码取反再 +1 ,所以我们计算出来的绝对值是2^31,那最小负数就是 -2^31

短整型占2个字节

        short num = 2;

长整型,占8个字节表示的整数的范围是-2^63 ~ 2^63-1
定义一个长整形变量

        long num = 10l;//l大小写都可以

单精度浮点型占4个字节

        float num2 = 1.0f;

双精度浮点型占8个字节

        double num1 = 1.0;

float类型表示的数据的精度范围比较小,因此再使用浮点型数据时一般先考虑double

接下来我们看一段代码

        int a = 1;
        int b = 2;
        System.out.println(a/b);//结果输出为0
        double a1 = 1.0;
        double b1 = 2.0;
        System.out.println(a1/b1);//结果输出为0.5

以数学思维来看结果就是0.5呀,为什么会出现0这个结果呢?

因为在Java中 int 型与 int 型进行计算时,得到的结果仍然是 int 型,我们知道 int
型是不能有小数点的,计算结果会将小数点后的数据直接舍去,而double 是双精度浮点型,当然可以有小数点啦,对叭。

        double num3 = 1.1;
        System.out.println(num3 * num3);//输出结果:1.2100000000000002

那这段代码的输出结果又为什么是这样的呢?结果不应该是1.21嘛?

因为double 类型的数据的内存布局和 int 型有很大差别,遵守IEEE
754标准,尝试用有限的内存空间表示无限的小数,因此会存在精度误差.

字符类型
C语言中使用ASCII码表示字符,一个字符占1个字节,Java中用Unicode表示字符,一个字符占2个字节,字符类型也可以表示中文

        char ch = 'a';

字节类型

        byte b = 0;

字节类型表示的也是整数,只占1个字节,表示的范围是-128~127
布尔类型
有时占1个字节,有时候占一个比特位,没有明确规定

        boolean value = true;//boolean类型的变量只有 true(真) 和 false(假) 两种取值

Java中 boolean 类型和 int 类型不能相互转换,不存在 1 表示true,0 表示 false

4、变量的作用域

变量的作用域就是变量的生效范围,一般范围都在变量所在的大括号内

public class Test {
        public static void main(String[] args) {
            int a = 0;
            System.out.println(a);
        }
        public void print1() {
            System.out.println(a);//Cannot resolve symbol 'a',找不到变量a
        }
}

public class Test {
        public static void main(String[] args) {
            {
                int a = 0;
                System.out.println(a);//打印0
            }
            {
                double a = 3;
                System.out.println(a);//打印3.0
                //编译通过,虽然跟上面的变量名相同,但是与上面的变量完全无关
            }
        }
}

5、变量的命名规则

(1)变量名只能由数字、字母、下划线组成
(2)不能是数字开头
(3)变量名中的字母有大小写之分
(4)变量名要见名知意,一般都是英文,狮子啊不好用英文描述拼音也不是不可以
(5)词性一般是名词,小驼峰命名法比较好看,就是变量名由很多单词组成时第一个单次小写,其他的单词的首字母都大写

            int maxValue = 3;

final 修饰的变量就是一个常量,它所代表的值不能被修改

            final int a = 10;
            a = 20;//编译出错,Cannot assign a value to final variable 'a'

6、类型转换

  int a = 10;
            short b = 20;
            long c = 30;
            double d = 40;
            boolean e = false;
            a = b;//short 转换成 int 可以
            b = a;//编译出错,int 转换成 short 不可以
            a = c;//编译出错,long 转换成 int 不可以
            c = a;//int 转换成 long 可以
            a = d;//编译出错,double 转换成 int 不可以
            d = a;//int 转换成 double 可以
            a = e;//编译出错,boolean 转换成 int 不可以
            e = a;//编译出错,int 转换成 boolean 不可以

从上面代码我们可以看出,表示范围小的类型可以转换成表示范围大的数据类型,反过来就会编译出错,而boolean 和int 是不能相互转换的

            byte f = 100;//编译通过,100在 byte 能表示的范围之内(-128~127)
            byte g = 300;//编译出错,300 超出了 byte 能表示的范围

Java会自动进行检查校验,判断赋值是否合理
使用强制类型转换

            int a = 0;
            double b = 10.5;
            a = (int)b;
            System.out.println(a);//输出结果为10

通过这段代码可以看到可以把 double 类型的数据强制转换成 int 类型,但是小数点之后的数据就丢失了,所以强制转换可能会导致精度丢失

但是强制类型转换不一定都能够转换成功,比如:

            int a = 5;
            boolean b = false;
            b = (boolean)a;//编译失败,Inconvertible types; cannot cast 'int' to 'boolean'

7、数值提升

当不同类型的数值进行运算时,会产生怎样的结果呢?

            int a = 10;
            long b = 20;
            int c = a + b;//编译出错
            long d = a + b;

当 int 和 long 类型的数据混合进行运算的时候,int 会提升为 long 类型,得到的结果也是 long 类型的,非要用 int 类型接收结果的话就要强制转换

            int c = (int)(a + b);//编译成功

下面这种情况也是编译失败的

            byte a = 10;
            byte b = 20;
            byte c = a + b;//编译失败

因为计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,像byte ,short 这中低于4个字节的,会先提生成 int 再进行计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值