二.变量,类型和运算符

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);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容