二、变量,类型和运算符

1. 变量

1.1 变量的概念

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。可以理解为为某块内存起个名字,通过这个名字找到内存中存放的数据。这块内存的名字一般被称为叫变量名。
示例1:存放整数数据的变量

int temp = 10;

int: 表示声明了一个可以存放整数的内存
temp: 变量名(内存的名字)
=: 赋值,将等号右侧的数据放入左侧。 此处将数字30放入a的内存中
10: 数值

示例2 :计算两个整数的和

int a = 30;
int b = 25;
int c = a + b;

变量在声明时,也可以不赋值

int a;
int x,y,z;

1.2 变量的命名规则
  • 不能与已有的变量名重复
  • 变量名必须已英文字母或者$开头
  • 变量名的其余字符可以是英文,数字,下划线和$,中间不能有空格
  • 变量名不能使用Java中的关键字和保留字
    java中的两个保留字分别是const和goto
1.3 变量的命名规范

使用的是“驼峰原则”

  • 使用英文单词(名词)做为变量名
  • 首字母如果是英文,应该是小写字母。比如:name,studentName
  • 如果由多个单词组成,第二个单词起,首字母要大写,其余全小写。
  • 尽量不要使用无意义的单独字母,如果使用最好写好注释

2. 类型

Java语言是一门强类型的编程语言,声明某个变量时必须指定变量存储类型。
Java中的类型一共有两种

  • 基本数据类型(8种):也可以称为原始类型
  • 引用数据类型(可以理解为自定义类型)
2.1 基本数据类型

byte short int long float double char boolean

2.1.1 数值类型
  1. 整数类型:表述一个整数
类型 占用空间 位空间 取值范围
byte 1Byte 8bit [-27,27-1]
short 2Byte 16bit [-215,215-1]
int(默认) 4Byte 32bit [-231,231-1]
long 8Byte 64bit [-263,263-1]
  1. 浮点数类型:表述一个浮点数(小数)
2.1.1
float 4Byte
double(默认) 8Byte
示例3: 声明一个浮点数3.14
double d = 3.14;

2.1.2 字符类型

char表述一个字符(无论英文,数字 ,汉字,符号都算一个字符)
Java中一个字符使用单引号表示'A','-','好','Y'
示例:声明一个字符‘A’

char c = 'A';

2.1.3 布尔类型

boolean表述逻辑的“真”或“假”

  • 真 true
  • 假 false
    示例:声明boolean类型的变量
boolean isRight = true; //表示真
boolean isRight = false; //表示假

2.1.4 基本数据类型的转换
  • 自动转换
    规则:
  1. 范围小的类型向范围大的类型
  2. 整数向浮点数类型
  3. char型向int型
  4. 布尔值不能进行任何的转换
image

示例: 自动转换

byte b = 28;
int a = b; //自动转换OK  范围小->范围大
System.out.println(a);

long o = 1222;
float f = o; //自动转换OK   正数->浮点数
System.out.println(f);

char c = '啊';
int x = c; //自动转换OK    char -> int
System.out.println(x); //ASC码

  • 强制转换
    当需要反向类型转换时,需要利用强制转换,强制有可能造成数据的精度丢失
    精度丢失:数据丢失了位数据或者浮点数部分
    示例7:强制转换
//强制转换成功
int a = 97;
byte b =  (byte) a;
System.out.println(b);

//精度丢失
int x = 200; 
byte y = (byte) x;
System.out.println(y);

//精度丢失
double d = 3.14; //丢失浮点数部分
int z = (int) d;
System.out.println(z);

//int -> char  可以正常转换
int i = 65;
char j = (char)i;
System.out.println(j);

3. 运算符和表达式

3.1 算术运算符

进行四则运算的符号,主要包含的操作是加减乘除和取余。

  • +号 表示加法 5+3
  • -号 表示减法或者负数 5-3或-5
  • 号 表示乘法 53或5x相当于5x (不建议省略号)
  • /号 表示除法 5/2 (除数不能为0的,执行时程序会报错)
    整数除法的特点:得到的还是整数
  • %号 表示取余 5%2 取余运算的结果和符号问题与MySQL讲解Mod函数的规则是一致的。(正负号与被除数一致)

优先级:乘除和取余的操作优先级高于加减,如果弄不清楚,可以加括号
浮点数的乘法和除法时,会有精度问题
示例1:

double d1 = 10.0;
double d2 = 3.0;
System.out.println(d1/d2);

运算结果是

image

由于浮点数运算可能会有精度问题,尽可能的避免使用浮点数的运算结果做为程序的判断依据。
如果必须浮点数做为程序的判断依据,需要使用高精度浮点数BigDecimal类

//整数与浮点数的运算
int a = 5;
double d = 2.5;
double x1 = a+d;
double x2 = a/d;
System.out.println(a+d);
System.out.println(a/d);
//同类型数据的加法
byte s1 = 35;   //35 是 int
short s2 = 37;  //37 是 int
int s3 = s1+s2; //s1 + s2 = int
System.out.println(s3);

image
3.2 赋值运算符

对变量进行复制的操作符

  • = 赋值 将等号右侧的数据或者变量值赋值给等号左侧
  • += 将等号右侧的数据或者变量值以增量的方式赋值给等号左侧
int a = 3;
int b = 5;
b += a; //运算结果相当于 b = b+a;
b结果是8

  • -= 将等号右侧的数据或者变量值以增量(减法)的方式赋值给等号左侧
int a = 3;
int b = 5;
b -= a; //运算结果相当于 b = b-a;
b的结果是2

  • *= 将等号右侧的数据或者变量值以增量(乘法)的方式赋值给等号左侧
int a = 3;
int b = 5;
b *= a; //运算结果相当于 b = b*a;
b的结果是15

  • /= 将等号右侧的数据或者变量值以增量(除法)的方式赋值给等号左侧
int a = 3;
int b = 5;
b /= a; //运算结果相当于 b = b/a;
b的结果是1

  • %= 将等号右侧的数据或者变量值以增量(取余)的方式赋值给等号左侧
int a = 3;
int b = 5;
b %= a; //运算结果相当于 b = b%a;
b的结果是2

示例2:以下代码是否有错误

short s = 35;
s = s + 1; //报错, s+1被认为是int类型   不能向short类型直接转换

short s = 35;
s += 1; //OK, +=含有类型转换的功能

3.3 比较运算符

用于对数据进行比较的操作符,它的运算结果是boolean类型

  • == 判断两端的数据是否“相等”
int a = 5;
int b = 3;
boolean c = (a == b);
c的结果是false

  • != 判断两端的数据是否“不相等”
int a = 5;
int b = 3;
boolean c = (a != b);
c的结果是true

  • 和>= 判断左侧是否大于(大于等于)右侧

int a = 5;
int b = 3;
boolean c = (a > b);
c的结果是true

  • <和<= 判断左侧是否小于(小于等于)右侧
int a = 5;
int b = 3;
boolean c = (a < b);
c的结果是false

3.4 单目运算符

用于控制整数自增和自减

  • ++
    用于表示某个整数变量进行自增1的操作
    如果++在整数变量的后面,表示变量值先参与表达式运算,再自增1
int i =5 ;
int j = (i++)+(i++);
           5        6
j 是  11

如果++在整数变量的前面,表示变量值先自增1,再参与表达式运算

int i = 5;
int j = (++i)+(++i);
            6        7
j 是  13

  • --
    用于表示某个整数进行自减1的操作

为一个变量+1的方法有哪些?

  • a = a + 1; 效率最低
  • a += 1; 含有类型转换
  • a++;或++a; 使用++进行自增1操作是效率最高
    推荐++的方式完成变量的自增或自减操作
3.5 逻辑运算符

表示两个逻辑类型(boolean)类型的逻辑操作

  • 与 && 如果A&&B 要求必须满足A和B两个条件
  • 或 || 如果A||B 至少满足A和B两个条件其一
  • 非 ! 如果!A 表示A的逻辑取反
    示例3:逻辑运算
int a = 5;
int b = 3;
int c = 2;
boolean x1 = (a > b) && (b > c);
boolean x2 = (a > b) && (b < c);

boolean x3 = (a > b) || (b > c);
boolean x4 = (a > b) || (b < c);
boolean x5 = (a < b) || (b < c);

System.out.println(x1);
System.out.println(x2);
System.out.println(x3);
System.out.println(x4);
System.out.println(x5);
System.out.println("=======================");
boolean x6 = !(a > b);
System.out.println(x6);

image

逻辑运算符存在“短路”现象

&& true false
true true false
false false false

| || | true | false |
| --- | --- | --- |
| true | true | true |
| false | true | false |

短路产生的原因

image

示例4:短路

int i = 5;
// &&或者||  与     ++或--  放在一起    十有八九就是考短路
boolean x = (i++ > 5) && (++i < 6);
//i++ > 5  相当于   5 > 5   false
//x = false   (++i < 6)被短路,不会被执行
// i只自增了1次   i的值是6
System.out.println(x);
System.out.println(i);

面试题: &与&&的区别? |与||的区别?
答案:&可以进行位运算和逻辑运算,它不是短路的。&&只能进行逻辑运算,它是短路的。

3.7 三目运算符

由2个符号共同组成的一个含有逻辑的运算
int x = (逻辑运算) ? a : b;
当逻辑运算结果为true时,x=a;
当逻辑运算结果为false时,x=b;
a和b的类型必须与x的类型一致

示例4:判断输入的数据是否是偶数

//允许用户在控制台上输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字:");
int i = sc.nextInt();

//判断用户输入的数字是否是偶数     i % 2 == 0
char c = (i % 2 == 0) ? '是' : '否';
System.out.println(c);

zjjli

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容