java基础02|变量与运算符

第二章 Java基本语法:变量与运算符

2.1 关键字和保留字

保留字:尚未使用,以后版本会作为关键字用,goto,const

2.2 标识符

合法标识符规则:
1.由26个英文字母大小写, 0-9 , _或 $ 组成
2.数字不可以开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格
名称命名规范
1.包名:多单词组成时所有字母都小写: xxxyyyzzz
2.类名、接口名:多单词组成时,所有单词的首字母大写: XxxYyyZzz
3.变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写: xxxYyyZzz
4.常量名:所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ

2.3变量

先声明后使用
1.数据类型 变量名=变量值;
2.注意:
变量必须先声明后使用
变量都定义在作用域{}内。在作用域内,有效。
同一个作用域,不可以声明两个同名的变量
变量根据声明位置分类:
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
数据类型
在这里插入图片描述
字符串属于类。
基本数据类型
在这里插入图片描述
byte的范围:-28 ~28 -1
在这里插入图片描述
为什么float和int同样占四个字节。但是其表示范围比long还大?
这是因为float中一部分表示具体数值,另一部分表示10的几次幂,所以表述范围大。还可以表示小数点,但存储空间一定,精度差。
在这里插入图片描述

char c1='a';
char c1=97//ASCII码

   
   
  • 1
  • 2

基本数据类型之间的运算法则
在这里插入图片描述

double d1 = 12.3;
        //精度损失举例1
        int i4 =(int )d1;
        System.out.println(i4);//12
        //没有精度损失
        long l1 = 123;
        short s1 = (short) l1;
        System.out.println(s1);
//练习2区分+什么时候是加法什么时候表示连接运算
        //* *
        System.out.println("* *");//✔
        System.out.println('*' + '\t' + '*');//❌因为前两个都不是string类型,所以+代表加法运算
        System.out.println('*' + "\t" + '*');//✔前两个中出现了string类型,故+代表连接运算
        System.out.println('*' + '\t' + "*");//❌同上
        System.out.println('*' + ('\t' + "*"));//✔

字符串String类型变量的使用
在这里插入图片描述

int num=10;
char c='a'//97;
String s="hello";
System.out.println(c+num+s);//107hello
System.out.println(c+s+num);//ahello10

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

进制之间的转换
二进制(binary): 0,1 ,满2进1.以0b或0B开头。
十进制(decimal): 0-9 ,满10进1。
八进制(octal): 0-7 ,满8进1. 以数字0开头表示。
十六进制(hex): 0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。如: 0x21AF +1= 0X21B0

原码反码补码:
原码:直接将一个数值换成二进制数。最高位是符号位
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
负数的补码:其反码加1
正数的原码、反码、补码都相同
计算机底层都是使用的数值的补码保存数据的。
在这里插入图片描述
进制转换:
十进制-二进制:除2取余的逆
二进制-八:三位二进制为八进制一位
二进制-十六:三位二进制为十六进制一位

2.4 运算符

在这里插入图片描述
算术运算符
在这里插入图片描述

short s1=10;
s1=s1+1;//编译失败,s1+1是int类型
s1=(short)(s1+1);正确
s1++//自增1不会改变本身变量的数据类型,编译成功,同时比上一句效率高

 
 
  • 1
  • 2
  • 3
  • 4

赋值运算符
在这里插入图片描述

short s1=10;
s1=s1+1;//编译失败,s1+1是int类型
s1=(short)(s1+1);正确
s1+=1//不会改变本身变量的数据类型,编译成功。

 
 
  • 1
  • 2
  • 3
  • 4

列子一:
开发中,如果希望变量实现+2的操作,有几种方法?(前提int num=10;)

int num=10;
num=num+2;//方式一
num+=2//方式二,推荐

 
 
  • 1
  • 2
  • 3

列子二:
开发中,如果希望变量实现+1的操作,有几种方法?(前提int num=10;)

int num=10;
num=num+1;//方式一
num+=2//方式二
num++//方式三,推荐

 
 
  • 1
  • 2
  • 3
  • 4

列子三:

int i=1;
i*=0.1;
System.out.ptintln(i);//0,0.1转为int,截断为0
i++;
System.out.ptintln(i);//1

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

比较运算符
在这里插入图片描述

boolean b1=true;
boolean b2=false;
System.out.println(b2==b1);//false
System.out.println(b2=b1);//true
System.out.println(b1=false);//false

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

逻辑运算符
在这里插入图片描述
实例1

int x=1;
int y=1;
if(x++==2 & ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2
	x=7;
}
System.out.println("x="+x+",y="+y);//2,2

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实例2

int x=1;
int y=1;
if(x++==2 && ++y==2){ //x++:1,x:2,x++==2:false
	x=7;
}
System.out.println("x="+x+",y="+y);//2,1

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实例3

int x=1;
int y=1;
if(x++==2 | ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2,true
	x=7;
}
System.out.println("x="+x+",y="+y);//7,2

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

实例2

int x=1;
int y=1;
if(x++==2 || ++y==2){ //x++:1,x:2,x++==2:false,++y:2,y:2,
	x=7;
}
System.out.println("x="+x+",y="+y);//7,2

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

面试题:

class Test{
	public static void main(String[] args){
	boolean x=true;
	boolean y=false;
	short z=42;
	//if(y==true)
	if((z++==42)&&(y=true))z++;  //z++:42,t,z:43,z:44
	if((x=false)||(++z==45))z++;  //f,++z:45,z:45,t,z:46
	System.out.println("z="+z);//46
	}
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

位运算符
在这里插入图片描述
最高效的方式计算2*8?
2<<3或8<<1(更好)
实例1
交换两个变量的值

int num1=10;
int num2=20;
System.out.println("num1="+num1+",num2="+num2)
//方式一,推荐
int temp=num1;
num1=num2;
num2=temp;
//方式二
//好处:不定义临时变量,弊端:相加操作可能超出存储范围;有局限性,只能是用于数值型
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
//方式三 依据:m=(m^n)^n,局限性,只适用于数值类型
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

三元运算符
在这里插入图片描述
实例1
三个数中的最大值

//一步
int max=((n1>n2)?n1:n2)>n3?((n1>n2)?n1:n2):n3;
int max1=(n1>n2)?n1:n2;
//两步
int max2=(max1>n3)?max2:n3;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

运算符的优先级
在这里插入图片描述
实例一:
以下程序的输出结果是?

int a = 3;
int b = 1;
		if(a = b){
			System.out.println("Equal");
		}else{
			System.out.println("Not Equal");
		}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

编译不通过, 错误: 不兼容的类型: int无法转换为boolean if(a=b)
实例二:如何求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C

//方式一:自动实现
String str1 = Integer.toBinaryString(60);
String str2 = Integer.toHexString(60);
//方式二:手动实现
int i1 = 60;
int i2 = i1&15;//得到二进制的后四位
String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
int temp = i1 >>> 4;
i2 = temp & 15;//得到数的第二组四位二进制
String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
System.out.println(k+""+j);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值