JAVA基础(1) 变量与运算符

目录

一、关键字

二、标识符

三、变量

四、基本数据类型

五、基本数据类型变量间运算规则

六、运算符

总结


一、关键字

1.定义:被Java语言赋予了特殊含义,用做专门用途的字符串成为关键字。

2.特点:均为小写,关键字较多,边学变掌握即可。


二、标识符

1.定义:Java中变量、方法、类等要素命名时使用的字符序列,称为标识符。

2.通俗的讲,可以自己命名的都叫标识符。

3.标识符的命名规则(硬性要求):

  • 由26个英文字母大小写,0-9 ,_或 $ 组成  数字不可以开头。
  • 不可以使用关键字和保留字,但能包含关键字和保留字。
  • Java中严格区分大小写,长度无限制。
  • 标识符不能包含空格

4.标识符的命名规范(软性要求)

  • 包名:多单词组成时所有字母都小写:xxxyyyzzz。
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
  • 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

5.注意:标识符起名要见名知意


三、变量

1.变量的概念

  • 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
  • 变量的构成包含三个要素:数据类型、变量名、变量的值
  • Java中变量声明的格式:数据类型 变量名 = 变量的值

2.变量的作用:用于在内存中保存数据。

3.注意:

  • Java中每个变量必须先声明,后使用。
  • 使用变量名来访问这块区域的数据。
  • 变量的作用域:其定义所在的一对{ }内。
  • 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
  • 同一个作用域内,不能定义重名的变量。

4.Java中变量的数据类型

  • 基本数据类型:包括整数类型浮点数类型字符类型布尔类型
  • 引用数据类型:包括数组接口枚举注解记录

四、基本数据类型

0.补充知识:计算机存储单位

  • 字节(Byte):是计算机用于计量存储容量的基本单位,一个字节等于8 bit。
  • 位(bit):是数据存储的最小单位。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。
  • 转换关系:

         8 bit = 1 Byte
        1024 Byte = 1 KB
        1024 KB = 1 MB
        1024 MB = 1 GB
        1024 GB = 1 TB

1.整数类型:byte、short、int、long

  • byte:占1字节(8bit位)
  • short:占2字节
  • int:占8字节,变量通常声明为int,位数不够时用long
  • long:占16字节,赋值时需以L/l作为后缀

2.浮点类型:float、double(浮点类型不适合用于精准计算)

  • 浮点型常量有两种表示形式:
    十进制数形式。如:5.12 、512.0f、 .512 (必须有小数点)
    科学计数法形式。如:5.12e2 512E2 100E-2
  • float:单精度浮点型,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
  • double:双精度浮点型,精度是float的两倍。通常采用此类型。
    定义float类型的变量,赋值时需要
    以"f"或"F"作为后缀
    Java 的浮点型常量默认为double型

3.字符类型:char

  • char 型数据用来表示通常意义上“字符”(占2字节)
  • Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
  • char类型是可以进行运算的。因为它都对应有Unicode码,可以看做是一个数值。
  • ①char c1 = 't'; char c2 = '中'; char c3 = '1'; char c3 = '\n';
  • ② char c3 = '\n';// '\n'表示换行符
  • ③直接使用 Unicode值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。

4.布尔类型:boolean

  • boolean 类型用来判断逻辑条件,一般用于流程控制语句中
  • boolean类型数据只有两个值:true、false(不可以用0或非0代替

五、基本数据类型变量间运算规则

1.自动类型提升:小房子换大房子(自动执行)

   byte/char/short -> int -> long -> float -> double

(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时

int i = 't';    //char自动升级为int,其实就是把字符的编码值赋值给i变量了
double d = 10;      //int自动升级为double
long num = 1022;        //右边的整数常量值如果在int范围呢,编译和运行都可以通过,这里涉及到数据类型转换
byte bigB = 188;      //错误,右边的整数常量值超过byte范围
long bigNum = 102210221022L;     //右边的整数常量值如果超过int范围,必须加L,显式表示long类型。否则编译不通过

(2)当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算。

int i = 1;
byte b = 2;
double d = 3.0;
double sum = i + b + d;//混合运算,升级为double

(3)当byte,short,char数据类型的变量进行算术运算时,按照int类型处理。

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int

char c1 = '0';
char c2 = 'A';
int i = c1 + c2;//至少需要使用int类型来接收
System.out.println(c1 + c2);//113 

2.强制类型转换:大房子换小房子/小房子换大房子(手动执行)

        格式:数据类型1 变量名 = (数据类型1)被强转数据值;
                    // ()中的数据类型必须<=变量值的数据类型

(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转换为存储范围小的变量时,可能会精度损失或溢出。

int i = (int)3.14;//损失精度,3

double d = 10.2;
int num = (int)d;//损失精度,10

int i = 200;
byte b = (byte)i;//溢出,-56

(2)当某个值想要提升数据类型时,也可以使用强制类型转换。

int i = 1;
int j = 2;
double k = (double)(i/j); //0.0

(3)声明long类型变量时,可以出现省略后缀的情况。float则不同。

long l1 = 123L;
long l2 = 123;//此时可以看做是int类型的123自动类型提升为long类型

long l3 = 102210221022; //报错,因为123123123123超出了int的范围。
long l4 = 102210221022L;

float f1 = 12.3; //报错,因为12.3看做是double,不能自动转换为float类型
float f2 = 12.3F;
float f3 = (float)12.3;

3.String和基本数据类型的运算

(1)何为字符串类型String?

  • String不是基本数据类型,属于引用数据类型
  • 使用一对""来表示一个字符串,内部可以包含0个、1个或多个字符。
  • 声明方式与基本数据类型类似。例如:String str = “theodore_1022”;

(2)运算规则1:任意八种基本数据类型的数据与String类型只能进行连接“+”运算,且结果一定也是String类型

System.out.println("" + 1 + 2);//12

int num = 10;
boolean b1 = false;
String s1 = "abc";
        
String s2 = s1 + num + b1;
System.out.println(s2);//abc10false

String s3 = num + b1 + s1;//编译不通过,因为int类型不能与boolean运算
        
String s4 = num + (b1 + s1);//编译通过

(3)运算规则2:String类型不能通过强制类型()转换,转为其他的类型

String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//借助包装类的方法才能转


六、运算符

1.算数运算符(+、-、*、/、%、++、--)

(1)加减乘除模

int a = 3;
int b = 4;
		
System.out.println(a + b);// 7
System.out.println(a - b);// -1
System.out.println(a * b);// 12
System.out.println(a / b);// 计算机结果是0,为什么不是0.75呢?
System.out.println(a % b);// 3
        
//结果与被模数符号相同
System.out.println(5%2);//1
System.out.println(5%-2);//1
System.out.println(-5%2);//-1
System.out.println(-5%-2);//-1		
//商*除数 + 余数 = 被除数
//5%-2  ==>商是-2,余数时1    (-2)*(-2)+1 = 5
//-5%2  ==>商是-2,余数是-1   (-2)*2+(-1) = -4-1=-5

(2)“+”号的两种用法

  • 对于+两边都是数值的话,+就是加法的意思
  • 对于+两边至少有一边是字符串的话,+就是拼接的意思

(3)自加自减运算

        单独使用  VS  复合使用

1.单独使用
int a = 8;
a++;
System.out.println(a);    //9
int b = 8;
++b;
System.out.println(b);    //9
2.复合使用
// 其他变量放在一起使用
int x = 3;
//int y = ++x; // y的值是4,x的值是4,
int y = x++; // y的值是3,x的值是4

System.out.println(x);
System.out.println(y);

// 和输出语句一起
int z = 5;
//System.out.println(++z);// 输出结果是6,z的值也是6
System.out.println(z++);// 输出结果是5,z的值是6
System.out.println(z);

2.赋值运算符(=、+=、-=、*=、/=、%=)

  • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
  • 支持连续赋值。
  • +=、-=、*=、/=、%=:将符号左边和符号右边的值进行操作后,赋值给左边的变量

3.比较关系运算符(>、<、>=、<+、==、!=、instanceof)

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
  • > < >= <= :只适用于基本数据类型(除boolean类型之外)
  • == != :适用于基本数据类型和引用数据类型比较运算符
  • ==”不能误写成“=

4.逻辑运算符

(1)逻辑运算符,操作的都是boolean类型的变量或常量,而且运算得结果也是boolean类型的值。

(2)运算符说明:

  • & 和 &&:表示"且"关系,当符号左右两边布尔值都是true时,结果才能为true。否则,为false。
  • | 和 || :表示"或"关系,当符号两边布尔值有一边为true时,结果为true。当两边都为false时,结果为false
  • ! :表示"非"关系,当变量布尔值为true时,结果为false。当变量布尔值为false时,结果为true。
  • ^ :当符号左右两边布尔值不同时,结果为true。当两边布尔值相同时,结果为false。
    理解:异或,追求的是“异”!
  • 逻辑运算符用于连接布尔型表达式,在Java中不可以写成 3 < x < 6,应该写成x > 3 & x < 6 。
  • 区分“&”和“&&”:
    建议:开发中,推荐使用 &&
    && :如果符号左边是false,则不再继续执行符号右边的操作
    相同点:如果符号左边是true,则二者都执行符号右边的操作
    不同点:& : 如果符号左边是false,则继续执行符号右边的操作
  • 区分“|”和“||”:
    相同点:如果符号左边是false,则二者都执行符号右边的操作
    不同点:| : 如果符号左边是true,则继续执行符号右边的操作
    || :如果符号左边是true,则不再继续执行符号右边的操作
    建议:开发中,推荐使用 ||

int a = 3;
		int b = 4;
		int c = 5;

		// & 与,且;有false则false
		System.out.println((a > b) & (a > c)); 
		System.out.println((a > b) & (a < c)); 
		System.out.println((a < b) & (a > c)); 
		System.out.println((a < b) & (a < c)); 
		System.out.println("===============");
		// | 或;有true则true
		System.out.println((a > b) | (a > c)); 
		System.out.println((a > b) | (a < c)); 
		System.out.println((a < b) | (a > c));
		System.out.println((a < b) | (a < c));
		System.out.println("===============");
		// ^ 异或;相同为false,不同为true
		System.out.println((a > b) ^ (a > c));
		System.out.println((a > b) ^ (a < c)); 
		System.out.println((a < b) ^ (a > c)); 
		System.out.println((a < b) ^ (a < c)); 
		System.out.println("===============");
		// ! 非;非false则true,非true则false
		System.out.println(!false);
		System.out.println(!true);
        
        //&和&&的区别
        System.out.println((a > b) & (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a > b) && (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a == b) && (a++ > c)); 
        System.out.println("a = " + a);
        
        //|和||的区别
        System.out.println((a > b) | (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a > b) || (a++ > c)); 
        System.out.println("a = " + a);
        System.out.println((a == b) || (a++ > c)); 
        System.out.println("a = " + a);


5.位运算符(<<、>>、>>>、&、|、^、~)

(1)左移:<<

运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)
注意:当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

(2)右移:>>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)
注意:如果不能整除,向下取整

(3)无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)

(4)按位与:&

运算规则:对应位都是1才为1,否则为0。

(5)按位或:|

运算规则:对应位只要有1即为1,否则为0。

(6)按位异或:^

运算规则:对应位一个为1一个为0,才为1,否则为0。

(7)按位取反:~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1。


6.条件运算符

(1)格式:(条件表达式)? 表达式1:表达式2

(2)说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式2

(3)如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型

int i = (1==2 ? 10 : 22);
System.out.println(i);//22

boolean child = false;
System.out.println(child ? "小孩" : "大人"  );    //大人

int num = 1022;
System.out.println(num > 0? true : "num非正数");

总结

本篇对变量和运算符的知识进行了梳理概括,部分内容源自互联网,如有侵权请联系作者删除!

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值