Java基础02(变量 数据类型 运算符)

目录

一. 变量

1. 变量的定义

2. 变量名的命名要求

二. 基本数据类型

1. 整型

2. 浮点型

3. 字符型

4. 布尔类型

三. 引用数据类型(字符串)

四. 常量

五. 数据类型转换 

1. 自动类型转换 

2. 强制类型转换

2.1 溢出

2.2 四舍五入

2.3 字符

2.4 布尔类型

六. 运算符

1. 算术运算符

1.1 基本四则运算符

1.2 char也可以参与运算

1.3 类型提升

1.4 溢出

1.5 浮点数

2. 赋值运算符

3. 自增/自减运算符

4. 关系运算符

5. 逻辑运算符

6. 位运算

6.1 与运算 &

6.2 或运算 |

6.3 非运算 ~

6.4 异或运算 ^

6.5 移位运算 << 或 >>

6.6 用途

6.6.1 两数交换

6.6.2 判断奇偶数

6.6.3 求平均值

7. 条件运算符

七. 一些练习



一. 变量

1. 变量的定义

●在程序运行期间可以改变的量

●定义变量的两种方式

                  a.先定义再赋值

                          数据类型 变量名;

                          变量名 = 对应类型的值;

                  b.定义并且直接赋值

                          数据类型 变量名 = 对应类型的值;

	//声明变量并赋值: 数据类型 变量名 = 值;
		int num1 = 10;
		System.out.println(num1);//10
		num1 = 5;
		System.out.println(num1);//5
		
		//先声明后赋值	
		///数据类型 变量名;
		//变量名 = 值;
		int num2;
		num2 = 77;
		System.out.println(num2);//77

2. 变量名的命名要求

●变量名是由 英文字母、下划线_、$符号,数字组成,其中数字不能做开头,

●小驼峰命名法 uesrName  见名知意

●不能使用Java关键字作为变量名.例如:public static do while for void等.

二. 基本数据类型

在 Java 中定义了 8 种基本数据类型:

● 数值型

        整数类型: byte , short , int , long

        浮点数类型: float , double

● ⾮数值型

        字符类型: char

        布尔类型: boolean

 不同的数据类型占用的字节数不一样,Java基本数据类型占用的字节数

1. 整型

//数据类型 变量名 = 值;
		//数据类型:  基本数据类型: 整数 (byte short int long) 
		//							浮点数  (float 4  double 8)
		//							布尔 boolean
		//							字符 char
		//			   引用数据类型: 字符串
		//变量名:    数字 字母 下划线 $符号组成,不能以数字开头,不能是关键字
		//           小驼峰命名法 uesrName  见名知意
		//注意事项:  同范围内变量名不能重复  
		
		byte b=-128;//byte -- 1字节 -128~127
		System.out.println(b);
		
		short s= 2;//short -- 2字节 2^16  -2^15~2^15-1
		System.out.println(s);
		
		int i = 2147483647;//int -- 4字节 2^32  -2^31~2^31-1
		System.out.println(i);
		
		long lo = 2147483648L;//long -- 8字节 2^64  -2^63~2^63-1
		System.out.println(lo);//long类型的变量值后加L

[注]:对于long类型,需要加上l或L后缀,由于l与数字1相近似,所以一般都采用L后缀

2. 浮点型

        // float - 4
		// double - 8
		float f = 3.14f;// 后面要加F,声明为float类型
		float f1 = 3.14e38f;
		System.out.println(f);
		System.out.println(f1);

		double d = 3.1415926;
		double d1 = 3.1415926e21;
		System.out.println(d);
		System.out.println(d1);

3. 字符型

        // char -- 2字节 0~65535
		char c = '天';
		System.out.println(c);//天

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

		char c2 = 97;
		System.out.println(c2);//a

4. 布尔类型

布尔类型 boolean 只有 true 和 false 两个值,布尔类型通常是关系运算的计算结果。

        // 布尔类型 boolean
		// boolean类型被编译成int类型来使用 占用4个byte
		// boolean数组被编译成byte数组 每个boolean数组成员占用一个byte
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b1);//true
		System.out.println(b2);//false

		// 保存关系运行后的结果
		boolean b3 = 10 > 8;
		System.out.println(b3);//true

		int age = 77;// 定义变量参与运算
		boolean b4 = (age >= 70);
		System.out.println(b4);//true

三. 引用数据类型(字符串)

除了上述8种基本数据类型以外,其余类型均为“引用数据类型”。最常见的引用数据类型是String字符串,用于保存若干个字符:

        // 引用数据类型 ---字符串(值用引号引起来的内容叫做字符串)
		String s1 = "白日依山进";
		String s2 = s1;
		System.out.println(s1);// 白日依山进
		System.out.println(s2);// 白日依山进
		System.out.println(s1.charAt(0));// 白

四. 常量

定义变量的时候,如果加上 final 关键字,这个变量就变成了常量。常量在定义时,必须进 ⾏初始化赋值,之后就不可再次赋值,再次赋值会导致编译错误。

        // final 修饰变量 ----变成常量 值不可发生变化(基本数据类型)
		// 常量命名建议使用大写字母
		final double PI = 3.14;
		System.out.println(PI);

五. 数据类型转换 

(数值、字符)数据是不同的数据类型之间进行相互转换操作

1. 自动类型转换 

小范围--->大范围不需要任何特殊操作,直接进行转换就行

        //数据类型转换:(数值、字符)数据是不同的数据类型之间进行相互转换操作
		//自动类型转换:小范围--->大范围不需要任何特殊操作,直接进行转换就行
		//强制类型转换:大范围--->小范围
		
		byte b = 10;
		int i = b;//byte类型变量可以直接存储到int类型中
		System.out.println(i);//10

		short s = 255;
		i = s;//short类型变量可以直接存储到int类型中
		System.out.println(i);//255

		long lo = 1222L;
		float f = lo;//long->float
		System.out.println(f);//1222.0

		char c = '中';
		i = c;//char-->int
		System.out.println(i);//20013

如图所示,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

2. 强制类型转换

●大范围--->小范围

●小范围数据类型 变量名  = (小范围数据类型) 大范围的值;

●用于强制的转换一个数值的类型,可能造成精度降低或溢出。

        //强制类型转换:大范围--->小范围
		//小范围数据类型 变量名  = (小范围数据类型) 大范围的值;
		//溢出
		//精度丢失
		int i = -129;
		byte b = (byte)i;//可能存在溢出
		System.out.println(b);//127 溢出
		
		float f = 12.0F;//float-->int 可能存在的问题 精度丢失
		int num = (int)f;
		System.out.println(num);//12

2.1 溢出

        // 进行强制类型过程中可能会产生的问题
		// 溢出
		// 精度丢失

		// 整数 -- 整数 溢出
		int i = 128;
		byte b = (byte) i;
		System.out.println(b);//-128

		// 浮点数 --整数,超过其取值范围 结果为最大值 或最小值
		float f = -4.3e16F;
		int num = (int) f;
		System.out.println(num);//-2147483648

2.2 四舍五入

        //对浮点数进行四舍五入取整操作
		double d = 12.53;
		//方式1:
		System.out.println(Math.round(d));//13
		
		//方式2:
		int num = (int)(d+0.5);
		System.out.println(num);//13

2.3 字符

        //97--a  65--A  48--0 
		int num = 97;
		char ch = (char)num;
		System.out.println(ch);//a
		
		float f1 = 65.9F;
		char ch1 = (char)f1;
		System.out.println(ch1);//A

2.4 布尔类型

boolean类型不能参与类型转换

//boolean类型不能参与类型转换
		boolean b = true;
		int i =(int)b;

六. 运算符

1. 算术运算符

1.1 基本四则运算符

        //单目:+ -
		//双目:+ - * / %
		//不同的数据类型进行运算得到的结果为 大范围的数据类型
		int a = 10;
		double b= 3;
		int add = (int)(a+b);
		System.out.println(add);//13
		System.out.println(a-b);//7.0
		System.out.println(a*b);//30.0
		System.out.println(a/b);//浮点数进行除法运算得到 浮点数
		System.out.println(a%b);//1.0

[注]:整数的除法对于除数为0时运行时将报错,但编译不会报错。

1.2 char也可以参与运算

		//不同的数据类型进行运算后结果为大范围的数据类型
        char c = 'a';
		char c1 = (char)(c+1);
		System.out.println(c1);//b
		
		byte b = 12;
		int b1 = b+10;
		System.out.println(b1);//22

1.3 类型提升

        //1.byte short char 在进行运算的时候会进行类型提升 提升到int类型
		byte b1 =126;
		byte b2 =2;
		int b3 = b1+b2;
		byte b4 = (byte)(b1+b2);
		System.out.println(b3);//128
		System.out.println(b4);//-128
		
		//2.javac编译的时候完成了加法运算
		// .class字节码文件中存储的是 byte num = 14
		byte num  = 12+2;
		System.out.println("num的值为"+num);//num的值为14

1.4 溢出

由于整数存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,会得到一个奇怪的结果,例如:

        //溢出 整数范围限制 超过范围溢出的问题产生
		int a = 2147483647;
		int b = 1;
		int add = a + b;
		System.out.println(add);//-2147483648

		//浮点数溢出
		double d1 = 0.0 / 0;//NaN not a number
		System.out.println(d1);

		double d2 = 10.0 / 0;//Infinity
		System.out.println(d2);
		
		double d3 = -10.0 / 0;//-Infinity
		System.out.println(d3);

1.5 浮点数

        // 浮点数运算的时候需要注意
		double x = 10 - 9.9;
		double y = 1.0 - 9.0 / 10;
		System.out.println(x);// 0.09999999999999964
		System.out.println(y);// 0.09999999999999998
		System.out.println(x == y);// false
		// 浮点数相等一般用误差来判断
		System.out.println(Math.abs(x - y) < 0.00001);// true

2. 赋值运算符

        //1.注意先运算等号右边的值 再进行赋值运算
		//2.自带强制类型转换
		byte a = 10;
		a += 2;// a=(byte)(a+2);
		a -= 2;// a=a-2;
		System.out.println(a);// 10

		a *= 2 + 1;// a=a*(2+1);
		System.out.println(a);// 30

		a /= 2 + 1;// a=a/(2+1);
		System.out.println(a);// 10

		a %= 3;// a=a%3;
		System.out.println(a);// 1

3. 自增/自减运算符

        //1.只能用在变量上,不能用在常量上
		//2.单独使用++ --,在变量前或者变量后,结果一致。
		//3.混合使用:
		//++(+1) --(-1)在变量的前面,先执行+1或者-1操作,再赋值给其他变量
		//++(+1) --(-1)在变量的后面,先赋值,再执行+1或者-1操作
		int a = 10;
		a++;// a= a+1;
		++a;// a= a+1
		a--;// a= a-1
		--a;// a= a-1
		System.out.println(a);// 10

		// a的值为10
		int b = --a;
		System.out.println(b);// 9
		System.out.println(a);// 9

		System.out.println("===========");

		int num = 100;
		int c = num--;
		System.out.println(c);// 100
		System.out.println(num);// 99

[注]  ++写在前面和后面计算结果是不同的,

        ++n表示先加1再引用n,

        n++表示先引用n再加1。

4. 关系运算符

●关系运算符: >,>=,<,<=,==,!=

●关系运算符用于计算 数值 与 数值 之间的大小等值关系,计算结果为boolean值

        //关系运算符: >,>=,<,<=,==,!=
		boolean flag = 5==3.0;
		System.out.println(flag);//false
		
		int score = 99;
		System.out.println(score>=99);//true
		
		char c='&';//字符也可以参与运算
		System.out.println(c>=97);//false

5. 逻辑运算符

● &与左右两边都为真的时候结果才为真,其他为false

●&&--短路与

●|或左右两边有真则为真,全假则为假
● ||--短路或
●! --取反操作

●逻辑运算符用于计算boolean值与boolean值之间的与或非逻辑关系,计算结果为boolean值

        System.out.println(true & true);//true
		System.out.println(false & true);//false
		System.out.println(true & false);//false
		System.out.println(false & false);//false
		
		System.out.println("===========");
		
		System.out.println(true | true);//true
		System.out.println(false | true);//true
		System.out.println(true |false);//true
		System.out.println(false | false);//false

●如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。因为false && x的结果总是false,无论x是true还是false,因此,与运算在确定第一个值为false后,不再继续计算,而是直接返回false。

●同理,对于||运算,只要能确定第一个值为true,后续计算也不再进行,而是直接返回true:

	    int num1 = 1;
		int num2 = 0;
		System.out.println((num1<num2)&&(num1>num1/num2));//false
//		System.out.println((num1<num2)&(num1>num1/num2));//报错 算术异常
		System.out.println((num1>num2)||(num1>num1/num2));//true
//		System.out.println((num1>num2)|(num1>num1/num2));报错 算术异常

6. 位运算

位运算是按照整数的二进制位进行移位、与、或、非、异或的运算,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等数据类型(浮点型不能进行位运算)。

6.1 与运算 &

与运算的规则是,必须两个数同时为1,结果才为1:

    // 位运算操作对象二进制       
        int a = 5;
		int b = 6;
		// &按位与两个都为1,结果为1
		System.out.println("与 " + (a & b));// 4

6.2 或运算 |

或运算的规则是,只要任意一个为1,结果就为1:

// |按位或两个有1则,结果为1	
		System.out.println("或 " + (a | b));// 7

6.3 非运算 ~

非运算的规则是,0和1互换(反转):

		System.out.println("非"+(~a));//-6

6.4 异或运算 ^

异或运算的规则是,如果两个数不同,结果为1,否则为0:

// ^按位异或只要两边不相同就为1
		System.out.println("异或 " + (a ^ b));// 3

6.5 移位运算 << 或 >>

	// <<移动指定的数字次数,每移动1次,在原来的基础上扩大2倍
		// >>移动指定的数字,每移动1次,在原来的基础上缩小一半
		System.out.println("左移 " + (a << 1));// 10
		System.out.println("右移 " + (b >> 1));// 3

简单来理解:左移实际上执行乘法,右移实际上执行除法

6.6 用途

6.6.1 两数交换

原理: a^0=a; a^a=0;

//对两数进行交换
		int a =5;
		int b =6;
		
//		//方式1:设置一个第三方的临时变量
//		int temp =b;
//		b=a;
//		a=temp;
//		System.out.println(a);
//		System.out.println(b);
		
		//方式2: 位运算 异或进行两数的交换
		a=a^b;
		b=a^b;
		a=a^b;
		System.out.println(a);
		System.out.println(b);
6.6.2 判断奇偶数

○ a&1 == 0 偶数
○ a&1 == 1 奇数

//判断某个数字是否为奇偶数
		int a = 11;
		boolean b = a % 2 == 0;
		System.out.println("是否为偶数:" + b);//false

		System.out.println("是否为偶数:" + ((a & 1) == 0));//false
		System.out.println("是否为奇数:" + ((a & 1) == 1));//true
6.6.3 求平均值

求平均值,防止溢出:(x&y)+((x^y)>>1)

原理:

①x&y 是取相同的位与,这个结果是x和y相同位的和的一半;

②x^y 是取x和y的不同位,这个结果相当于x和y不同位的和,然后右移1位,相当于对这个和除以了2;

③最后这两部分相加,就得到了x和y的平均数;

// 求两数之间的平均值
		int a = 2147483647;
		int b = 2147483647;
		// 溢出
		System.out.println((a + b) / 2);
		// 位运算 (x&y)+((x^y)>>1)
		System.out.println((a & b) + ((a ^ b) >> 1));
	

7. 条件运算符

Java还提供一个三元运算符b ? x : y。首先计算b,如果b为true,则只计算x,否则,只计算y。此外,x和y的类型必须相同,因为返回值不是boolean,而是x和y之一。

//条件表达式:表达式1?表达式2:表达式3
		//表达式1一定为布尔类型
		int a =10;
		String result =(a&1)==0?"是偶数":"是奇数";
		System.out.println(result);//是偶数
		
		//60以下 ---c
		//[60 - 80) --B
		//>=80 --A
		int score  =59;
		String result1 = score>=80?"A":(score>=60?"B":"C");
		System.out.println(result1);//c

七. 一些练习

1.请编写程序,输出最大值、最小值、中间值。

        int x =12,y=8,z=39;
		int max =(x>y)?(x>z?x:z):(y>z?y:z);
		int min =(x<y)?(x<z?x:z):(y<z?y:z);
		int sum =x+y+z;
		int mid =sum-max-min;


//方法2		
//		int mid1 = x>y?(x<z?x:(z>y)?z:y):(y<z?y:(z<x)?x:z);
//		System.out.println(mid1);

		System.out.println(max);//39
		System.out.println(min);//8
		System.out.println(mid);//12

 2.请编写程序,检查年份year,并按照下述判断条件,获取该年份的检查结果。
要求:使用三元运算符实现
●普通闰年:能被4整除但不能被100整除的年份。例如:2004年
●世纪闰年:能被400整除。例如:2000年
●普通平年:不满足闰年条件。

        int year = 2024;
		String result = year % 4 == 0 ? (year % 100 == 0 ? "世纪闰年" : "普通闰年") : "普通平年";
		System.out.println(result);//普通闰年

 3.变量ch是一个英文字母,如果此字母是小写,请将小写转大写,如果此字母是大写,请将大写转小写,并输出

        char ch = 'A';
		char result = (ch >= 'a' && ch <= 'z') ? (char) (ch - 32) : (char) (ch + 32) ;
		System.out.println(result);

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯诺依曼转世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值