数据类型、变量、运算符

一、数据类型

1、分类

基本数据类型
1.1 数值型
 (1)整型<br />                Byte 字节  8bit   <br />                Short 短整型 16bit   <br />                Int 整型 32bit <br />                Long 长整型 64bit <br />      (2)浮点型<br />                Float 单浮点 32bit  <br />                Double 双浮点 64bit<br />      (3)字符型<br />                Char 字符 16bit <br />      (4)布尔型<br />                Boolean 布尔 8bit
1.2 引用数据类型
     类,数组,接口

2、类型使用

2.1 整数型
public static void main(String[] args){
		byte b1 = 12;
		b1 = 2;
		System.out.println(b1);
		
		short s1 = 32767;
		//int类型使用的最多
		int i1 = -2147483648;
		//long类型的值,需要加L/l结尾,不区分大小写,建议大写
		long l1 = 2147483648L;
	}
2.1.1 进制
//二进制 0b开头
int i_1 = 0b0101;
//八进制 0开头
i_1 = 025;
//十六进制 0x开头
i_1=0x12af;
2.2 浮点型
public static void main(String[] args){
	//单浮点 必须加F/f结尾,不区分大小写
	float f1 = 1.5F;
	//双浮点,需要加D/d结尾,不区分大小写,D/d可省略
	double d1 = 5.6;
}
2.3 字符型

字符型的值用单引号表示,单引号内有且只有一个字符

public static void main(String[] args){
	char c1 = '啊';
	//字符型可以转换为int行,ASCII码
	int i1 = c1;
	System.out.println(i1);
   //还支持unicode编码   \ u 4位十六进制
	//而char类型默认值 就是 0000
	char c2 = '\u4f11';
	System.out.println(c2);
    // 字符串用string,使用双引号表示一串字符
    String s = "苗赛";
    s="\\\\";
    System.out.println(s);
}
2.4 转义符

转义符 \ ,把有意义字符转换为无意义字符
保存 \ 需要使用转义符 \ 把 \ 转义就行

//转义符 \ ,把有意义字符转换为无意义字符
char c1 = '\'';
c1 = '\\';
c1 = '"';
System.out.println(c1);
2.5 布尔型

java中布尔型的值,只有true和false,一般用于流程控制,占用1字节,1表示true,0表示false

boolean flag = true;
System.out.println(flag);
flag = false;
System.out.println(flag);

3、类型转换

8种基本类型中,除了布尔型,其他类型都可以进行类型转换
自动类型转换:低精度到高精度位自动类型转换
强制类型转换:高精度到低精度是强制类型转换,有可能丢失精度
byte -> short ->int ->long ->float ->double 是自动转换,相反就是强制转换
byte short char 之间只能强制转换(byte和short中有负数,char中只有正数,所以需要强制转换),char到int之后是自动转换(int包含char的所有字节)

public static void main(String[] args){
	    byte b1 = 2;
	    short s1 = 4;
	    int i1 = 6;
	    long l1 = 66L;
	    //自动转换
	    i1 = b1;
	    l1 = s1;
	    //强制转换
	    i1 = (int) l1;
	    b1 = 10;
	    i1 = 130;
	    //精度丢失
	    b1 = (byte)i1;
	    System.out.println(b1);
	    
	    byte b = 97;
	    char c = (char) b;
	    System.out.println(c);
	    //char的范围是0~65535,不能保存负数
	    //char不考虑符号位,负数的二进制给了char之后,也会编程正整数
	    int i = -265;
	    System.out.println(0b1111111011110111);
	    char c1 = (char) i;
	    System.out.println(c1);
        //char不加引号,就是在ASCII码中选择
	    char c2 = 65271;
	    System.out.println(c2);
	}

二、变量

1、常量

值不能更改

public static void main(String[] args){
	    //字面量/常量
		//默认是int类型
		System.out.println(52);
		//long类型字面量
		System.out.println(214748364747L);
		//小数 默认double
		System.out.println(2.5);
		//float类型字面量
		System.out.println(2.5f);
		//字符类型字面量
		System.out.println('a');
		//布尔类型字面量
		System.out.println(false);
		//引用类型默认值是null,null是不能打印的
//		System.out.println(null);
	}

2、变量

2.1 变量声明

变量声明:数据类型 变量名 = 值;
变量可以多次使用,也可以重新覆盖原来的值

//变量声明:数据类型 变量名 = 值;
int i = 2;
//变量可以多次使用
System.out.println(i);	
//也可以重新覆盖原来的值
i = 22;
System.out.println(i);
//同作用域中,不能有同名的变量名
//一个大括号{}就是一个作用域,可以同时声明多个变量
int i4 = 1, i5 = 2, i6 = 3;
2.2 变量分类

根据变量声明位置不同,作用域不同,分成三类
1)局部变量:方法中创建的变量是局部变量
2)静态变量:类体中(方法外)使用static创建的变量
3)成员变量:类体中(方法外)没有使用static创建的变量

public class var_01 {
	//静态变量
	static int b = 3;
	//成员变量
	int c = 5;
	public static void main(String[] args){
		//局部变量
		int a = 2;
	}
}
2.3 变量调用

局部变量:局部变量具有临时性,方法执行结束就消失了,只能在当前方法中通过变量名使用
静态变量:类级别,通过类名、静态变量名使用,如果在当前类中使用当前类的静态变量,类名可以省略
成员变量:对象级别,通过对象.成员变量名调用,在成员方法中可以直接使用变量名调用

public static void main(String[] args){
		//局部变量
		int a = 2;
		//局部变量调用
		System.out.println(a);
		//静态变量调用
		System.out.println(var_01.b);
		System.out.println(b);
	}
2.4 ** 变量调用优先级**

当局部变量和静态变量同名,如果直接使用变量名,则调用的是局部变量,想要调用静态变量,需要加类名区分

2.5 默认值

局部没有默认值,不赋值不能使用
静态变量和成员变量有默认值,整数0,小数0.0,字符\u0000,布尔型false,引用类型null

三、运算符

1、算术运算符

算数运算符有+ - * / %,其中 * / % 优先级大于 + - ,并且+ - * / % 都是左结合,同优先级的时候,从左到右计算
**注意:**小数相加减,不要判断相等
++ – 属于一元运算,优先级大于 + - * / %

1.1 i++和++i的区别

i++ 是先初始化赋值,再自身+1
++i 是先自身+1,再初始化赋值
i++ 和 ++i单独出现时,没有区别,都是自身+1

i = 10;
int x = 10 + i-- + ++i * i + i++ + ++i;
System.out.println("x:" + x + ", i:" + i);

image.png
i++/-- 是需要先赋值在加一,所以第一个 i-- 是10,i的值变为了9,++ – 的优先级要高,需要有限计算,从左往右进行赋值,所以在 i++ * i 中·,后边的i值是10,赋值不讲究优先级

2、混合运算

当进行多类型混合运算时,结果是参与运算的最大类型
当只有byte short int char 四种类型中任意一种或多种进行运算,结果一定是int类型

3、关系运算

关系运算有 > >= < <= == !=
关系运算结果一定是布尔型

int a = 10;
int b = 11;
System.out.println(a == b);
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a != b);

结果如下:
image.png

4、位运算/逻辑运算

逻辑运算,以下几个操作结果均为布尔型
& 位与,两边都为true,结果就是true
| 位或,一边为true,结果就是true
! 位非,取反,true就是false,false就是true
&& 短路与,两边都为true,结果就是true,如果第一个条件为false,则第二个条件不再执行
|| 短路或,一边为true,结果就是true,如果第一个条件为true,则第二个条件不再执行
^ 位异或,两边不一样,结果就是true

System.out.println(1>2 & 2<3);
System.out.println(1>2 && 2<3);
System.out.println(1>2 | 2<3);
System.out.println(1>2 || 2<3);
System.out.println(!true);
System.out.println(true ^ false);

结果如下:
image.png
当 && 和 || 同时出现时,&& 优先级大于 ||

boolean flag = true || false && false;
System.out.println(flag);
//结果为true

& 也支持两边是数字,转换为二进制进行每位比较,都是1 则取1,否则取0
运算结果,不会超过两个数中的最小数,所以适合用于做数组下标技术(包括hash算法)

// 0000 1111
// 0000 1000
// 0000 1000
System.out.println(15 & 8);

^ 也支持两边是数字,转换为二进制进行每位比较,不同取1,相同取0
因此 两个相同数进行^ , 结果得0 , 并且 0和任何数进行^ , 该数不变

// 0000 1111
// 0000 1000
// 0000 0111
System.out.println(15 ^ 8);//7
System.out.println(15 ^ 56 ^ 23 ^ 15 ^ 23);//56

~ 按位非,转换二进制,1变0,0变1 (符号位也会变)

// 0000 1100
// 1111 0011 补码
// 1111 0010 反码
// 1000 1101
System.out.println(~12);

: 右移运算(考虑符号位,符号位不受影响)
10 >> 1 , 右移1次,会把最右边的一个删除,在最左边补0 (如果是负数,就补1)
右移一次,相当于该数 / 2

// 0 00000 10
System.out.println(10 >> 2);
// 1000 1010
// 1111 0101
// 111111 01
// 111111 00
// 100000 11
System.out.println(-10 >> 2);

: 右移运算(不考虑符号位),只补0,不补1

System.out.println(10 >>> 2);
// 1000 0000 0000 0000 0000 0000 0000 1010
// 1111 1111 1111 1111 1111 1111 1111 0101
// 001111 1111 1111 1111 1111 1111 1111 01
System.out.println(-10 >>> 2);
System.out.println(0b00111111111111111111111111111101);

<< : 左移运算,只补0, 不补1,左移1次,相当于该数*2

// 0000 0010
// 00 001000
System.out.println(2 << 2);//8
// 1000 0010
// 1111 1101
// 1111 1110
// 11 111000
// 11 110111
// 10 001000
System.out.println(-2 << 2);//
// 如何快速计算2的3次方?
System.out.println(2 << 2);

5、赋值运算

+= -= *= /= %= 优先级一样
-=:左边减去右边,结果赋值给左边,a-=b, a = a - b
当运算中出现多个赋值运算,则从右到左计算,右结合,还会隐式类型转换

int s = 5;
s *= s += s;
System.out.println(s);//50
	
byte c = 2;
byte y = 3;
c += y;
System.out.println(c);//5

6、字符串连接符

  • 即是加减运算 也是 字符串拼接符
int a = 10;
int b = 11;
System.out.println("a+b=" + (a + b));  
System.out.println(a + "+" + b + "=" + (a + b));

7、三目运算符

三目运算符,又叫三元运算符
布尔型表达式 ? 真语句 : 假语句;
布尔型表达式 : 只要运算结果是布尔型就行

int i1 = 1 < 2 ? 1 : 2;
System.out.println(i1);
  • 37
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值