变量&运算符

变量&运算符

1 补充

1.1 关键字

关键字是被java语言赋予特殊含义,具有专门用途的单词。

关键字特点:

  • 组成关键字的字母全部都是小写
  • 在常用的IDE中,针对关键字有特殊的颜色标记,非常直观。所以我们不需要去死记硬背。
    image-20250619095144948

1.2 注释

注释概述:用于解释说明程序的文字

注释的内容不会参与编译和运行

注释分类:

  • 单行注释
    • 格式: // 注释文字
    • 快捷键: ctrl + /
  • 多行注释 可以注释一行 也可以注释多行
    • 格式: /* 注释文字 */
    • 快捷键: ctrl + shift + /
  • 文档注释(以后再讲)

1.3 字面量

字面量(常量):在程序执行过程中,其值不可以发生改变的量

  • 字符串常量: 用双引号括起来的内容
  • 整数常量: 所有的整数
  • 小数常量: 所有的小数
  • 字符常量: 用单引号括起来的内容
    • 字符常量中只能放一个字符
  • 布尔常量: 只有true和false
  • 空常量: null (数组那天再讲)

1.4 转义字符

public static void main(String[] args) {
        // "我爱中国"
        // \"
        System.out.println("\"我爱中国\"");
        // \'
        System.out.println('\'');
        // \\
        System.out.println("\\");

        // \t 制表符
        System.out.println("\t我爱中国");
        // \u0000
        System.out.println('\u0000');
        // \n 换行
        System.out.println("\n");
        // \r 回车
        System.out.println("\r");
    }

1.5 常见码表

  • ASCII码表总共有128个,包含了英文的大小写,常用符号和阿拉伯数字
  • ISO8859-1码表总共有256个, 西欧码表中的前128位还是ASCII码表
  • GB2312 -- 使用两个字节表示一个汉字 GBK
  • 国际上建立一个Unicode编码体系,按照这套规范体系产生一个UTF-8码表 使用三个字节表示一个汉字

2 变量

2.1 变量概述

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

本质上,变量是内存中存储数据的区域,可以存数据和取数据,也可以改变数据。

格式:

数据类型  变量名 = 字面量;

数据类型 变量名;
变量名 = 字面量;

2.2 标识符

  • 作用:给包、类、方法、变量起名字的

  • 组成规则(硬性规定):由字符和下划线_ 美元符$ 组成

    • 字符采用的是Unicode字符集,包含英文大小写字母,中文字符,数字字符。
    • 符号只有两个 _ $
  • 注意事项(硬性规定):

    • 不能以数字开头
    • 不能是java中的关键字
  • 命名规则(建议):

    • 见名知意
    • 变量和方法:
      • 第一个单词小写,后面单词的首字母都大写
      • 每一个单词的首字母都大写
    • 包:其实就是文件夹,用于对类进行管理
      • 全部小写,多级包用.隔开
      • 是公司域名的反写
    • 常量名 用大写字母组成,单词之间用_隔开 MAX_LENGTH

2.3 数据类型

2.3.1 计算机存储单元

无论是内存还是硬盘,计算机存储设备的最小信息单元叫(位 bit),也称之为比特位,用b表示。计算机中最小的存储单元叫"字节",由大写B表示。

一个字节由连续的8个比特位组成。

1B = 8b

1KB = 1024B

1MB = 1025KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

1EB = 1024PB

1ZB = 1024EB

2.3.2 基本数据类型

在java中,数据类型分为基本数据类型和引用数据类型

四类 八种 字节数 数据表示范围
整型 byte 1 -128 ~ 127
整型 short 2 -32768 - 32767
整型 int(默认) 4 -2 ^ 31 - 2 ^ 31 - 1
整型 long 8 -2 ^ 63 - 2 ^ 63 - 1
浮点型 float 4 -3.403E38 - 3.403E38
浮点型 double(默认) 8 -1.798E308 - 1.798E308
字符型 char 2 表示字符 'a' '我' 0-65535
布尔型 boolean 1 true 和 false

整数默认类型是int,浮点型默认类型是double

定义long类型数据时,要加L或者l 建议添加L

定义float类型时,要添加F或者f,建议添加F

2.3.3 基本数据类型变量声明和使用

public static void main(String[] args) {
        // 格式: 数据类型 变量名 = 字面量;
        // byte
        byte b1 = 127;
        System.out.println(b1);
        // short
        short s1 = 20000;
        System.out.println(s1);
        // int
        int num1 = 1400_000_000;
        System.out.println(num1);
        // long
        long num2 = 8000_000_000L;
        System.out.println(num2);
        // float
        float num3 = 3.14F;
        System.out.println(num3);
        // double
        double num4 = 5.6435;
        System.out.println(num4);
        // char
        char c1 = '中';
        System.out.println(c1);
        // boolean
        boolean b2 = true;
        System.out.println(b2);
    }

补充:idea 2024版本卡死bug解决

image-20250619151937089

2.3.4 变量的注意事项

  • 变量如果没有进行赋值,是不可以直接使用的
  • 变量只有在自己所处的作用域之内才有效,出了作用域之后,就不能使用了
    • 作用域:从变量定义的那一行开始,到所在的大括号结束为止
  • 一行中可以一次性定义多个相同数据类型的变量并赋值
public static void main(String[] args) {
        //        int a;
//        // shift + alt + 上下
//        System.out.println(a);
//        a = 10;
        int a = 20;
        {

        }
        System.out.println(a);
        
        int x,y,z;
        int b = 20,c = 30;
        System.out.println(b);
    }

2.4 类型转换

当数据类型不一致时,需要进行类型转换

  • 自动(隐式)类型转换

    • 由范围小的数据类型转换为范围大的数据类型
    • 特点:代码不需要特殊处理,自动完成
    • 任何一个整型都可以赋值给浮点型变量,但是可能会出现精度损失
  • 强制(显式)类型转换

    • 由范围大的数据类型转换成范围小的数据类型
    • 特点:代码需要特殊处理,否则就编译失败
    • 格式:范围小的数据类型 变量名 = (范围小的数据类型)范围大的值;
    • 有可能会出现精度损失
    • 把浮点型转换成整型时,需要强制类型转换。当小数转换成整数时,不是四舍五入,而是直接舍弃掉小数部分。
  • byte/short/char在进行运算时会先提升为int类型再进行计算

  • char/byte/short类型来说,如果右侧没有超出范围,编译器会自动补全一个强制类型转换

package cn.javasm.demo;

public class TestDemo3 {
    public static void main(String[] args) {
        // long(大) = int(小)
        long num1 = 100;
        System.out.println(num1);
        // double(大) = float(小)
        double num2 = 3.14F;
        System.out.println(num2);

        int num3 = 1000000345;
        float f = num3;
        System.out.println(f);

        // int(小) = long(大)
        int num4 = (int)8000000000L;
        System.out.println(num4);

        // float(小) = double(大)
        float num5 = (float) 3.14;
        System.out.println(num5);

        int num6 = (int)3.99F;
        System.out.println(num6);

        // char类型可以转换
        char c = 'a';
        int num7 = c;
        System.out.println(num7);
        // char类型也可以参与运算
        System.out.println(c + 1);

        byte num8 = 20;
        // byte/short/char在进行运算时会先提升为int类型再进行计算
        // byte(小) = int(大)
        byte num9 = (byte)(num8 + 1);
        System.out.println(num9);

        byte num10 = 30;
        short num11 = 100;
        // short(小) = int(大)
//        short result = num10 + num11;

        // byte(小) = int(大)
        // char/byte/short类型来说,如果右侧没有超出范围,编译器会自动补全一个强制类型转换
        byte a = 10;
        byte b = (byte)128;
        System.out.println(b);

        short s = 30000;

         char c1 = 98;
        System.out.println(c1);
        short s2 = 'b';
        System.out.println(s2);
        // 乱码
        char c2 = (char)-1;
        System.out.println(c2);

        // 编译器是分开进行编译的,编译char c3 = 'b';能够确定c3的值是'b'
        // 当编译到short s3 = c3时,只能确定c3的类型是char类型,并不能确定c3的值。这时有可能c3的值超出short类型的范围
         char c3 = 'b';
         short s3 = (short) c3;
    }
}

3 运算符

3.1 概述

  • 运算符就是对常量或者变量进行操作的符号
  • 表达式:用运算符把常量或者变量连接起来的符合java语法的式子就可以称之为表达式
  • 分类:
    • 算术运算符
    • 赋值运算符
    • 关系运算符
    • 逻辑运算符
    • 三元运算符
    • 位运算符

3.2 算术运算符

public static void main(String[] args) {
        // 算术运算符
        // + 加
        int a = 10;
        System.out.println(a + 1);
        // char和字符串都可以加
        char c1 = 'a';
        System.out.println(c1 + 1);
        // 任何类型和字符串相加,结果都是字符串
        System.out.println("hello" + 1 + 2);
        System.out.println(true + "hello");

        // - 减
        System.out.println(a - 1);

        // * 乘
        System.out.println(a * 10);

        // / 除 两个整数相除,结果一定是整数  只看商,舍弃余数
        System.out.println(a / 20);
        // 只要除法的两端有小数,那么结果就是小数
        System.out.println(10 / 20.0);

        // % 取模(余)
        System.out.println(a % 20);

        // ArithmeticException
//        System.out.println(1 / 0);
        System.out.println(1.0 / 0);// Infinity 无穷
        System.out.println(-1.0 / 0);// -Infinity 负无穷
        System.out.println(0.0 / 0);// NaN  not a number 非数字

        // 对于负数取余,结果就是看表达式左边的服啊后
        System.out.println(-5 % 3);// -2
        System.out.println(-5 % -3);// -2
        System.out.println(5 % -3);// 2

        // 小数取余
        System.out.println(3.6 % 2);// 1.6
        System.out.println(3 % 1.4);

        double d = 3.0 - 2.99;
        System.out.println(d);

    }

自增自减运算符

自增运算符 ++

自减运算符 --

可以放在变量前面,也可以放在变量后面,会对变量进行+1或者-1的操作

  • 对于单独使用,放在变量前面或者后面没有区别
  • 对于混合使用
    • 如果符号在变量前面,首先对变量自身进行加1(减1)操作,然后再进行其他操作
    • 如果符号在变量后面,先进行其他操作,然后对变量自身进行加1(减1)操作
public static void main(String[] args) {
        int a = 10;
        // sout()  a++
        System.out.println(++a);
        System.out.println(a);

        int b = 100;
        int result = ++b + 1;
        System.out.println(b);// 101
        System.out.println(result);// 102

        int x = 30;
        int y = 40;
        // int num1 = ++x;// 31
        // int num2 = y--;// 40
        // int result1 = num1 + num2;
        int result1 = ++x + y--;
        System.out.println(x);// 31
        System.out.println(y);// 39
        System.out.println(result1);// 71
    }

自增自减运算符隐藏了一个类型转换

		byte b1 = 127;
        b1++;// b1 = (byte)(b1 + 1);
        System.out.println(b1);

3.3 赋值运算符

赋值运算符代表一个动作,将右边的值交给左边

=
+=  -=  *= /+ %= 
public static void main(String[] args) {
        int a = 10;
        a += 20;// a = a + 20;
        System.out.println(a);

        a -= 10;// a = a - 10
        System.out.println(a);

        a *= 10;// a = a * 10;
        System.out.println(a);

        a /= 10;// a = a / 10;
        System.out.println(a);

        a %= 10;// a = a % 10;
        System.out.println(a);

        // 隐藏了一个强制类型转换
        short b = 20;
        b += 20;// b = (short)(b + 20);
        System.out.println(b);

        // 连等赋值
        int c = 4;
        int d = c += c -= c *= c;
        System.out.println(d);
    }

3.4 关系(布尔)运算符

关系运算符的结果都是布尔值(true或者false)

==  相等
!=  不相等
>  大于
>= 大于等于
< 小于
<= 小于等于
public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 10;
        System.out.println(a == c);
        System.out.println(a != c);
        System.out.println(a > c);
        System.out.println(a >= c);
        System.out.println(a < c);
        System.out.println(a <= c);
    }

3.5 逻辑运算符

逻辑运算符连接的都是布尔值

与(且): &    全部都是true才是true,任何一个是false,那么就是false
或:     |    只要有一个是true,那么结果就是true,全部都是false,结果才是false
异或:   ^    相同就是false,不同就是true
非(取反):  如果是true,就是false,如果是false,就是true

		int a = 10;
        int b = 20;
        int c = 10;
        System.out.println((a > b) & (b > c) & (c == b) | (a == c));
        System.out.println((a == c) | (b < c));
        System.out.println((a == c) ^ (b > c));
        System.out.println(!(a == c));

&&(||)和&(|)的区别

&&(||)具有短路效果:如果左边的表达式的结果已经能够决定最终结果,那么右边的代码就不会再执行了,可以提高执行效率

	System.out.println(3 > 4 && ++a < 1000);
        System.out.println(a);

3.6 三元运算符

三元运算就是有三个元素参与的运算。

格式:

数据类型 变量名 = 判断条件 ? 表达式A : 表达式B;

如果判断条件的结果是true,那么将表达式A赋值给左边的变量

如果判断条件的结果是false,那么将表达式B赋值给左边的变量

public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;
        int max1 = ((a > b) ? a : b);
        int max = (max1 > c) ? max1 : c;
        System.out.println("最大值是" + max);

        int row = 0;
        System.out.println(row > 0 ? "success" : "error");
    }

作业: b分别是多少?

int a = 4;
int b = a++ + ++a;


int a = 4;
int b = ++a + a++;
posted @ 2025-07-04 20:44  小胡coding  阅读(22)  评论(0)    收藏  举报