Java变量
目录
一级目录
二级目录
三级目录
-
变量:程序中最基本的储存单元,程序执行中数值可变.变量其实是内存中的一小块区域,使用变量名来访问这块区域,试用前必须先申请(声明),然后必须赋值,才能使用.
-
变量是通过使用变量名来访问这块区域的.
要素:变量名,变量类型.
试用前必须声明:
[修饰符] type varName [=value][,varName[=value]……]; 例如: int i = 100;
Java数据类型
数据类型
强数据语言,指导JVM分配内存空间
在内存分配不同的大小的内存空间
按数据类型
- 基本数据类型
- 数值型
- 整数类型(byte,short,int,long)
- 浮点类型(float,double)
- 字符型(char)
- 布尔型(boolean)
- 数值型
- 引用数据类型
- 类(class):包含字符串
- 接口(interface)
- 数组([])
变量分类
- 从数据类型角度分:
- 基本数据类型
- 引用数据类型
- 位置角度
- 成员变量/类的属性(定义在类中)
- 局部变量(定义在方法中)
使用变量时:在赋值时需要注意与类型一致相匹配.
整数类型
Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性
类 型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -215 ~ 215-1 |
int | 4字节 | -231 ~ 231-1 |
long | 8字节 | -263 ~ 263-1 |
Java语言的整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,
float的容量大于int long
对于整数,有四种表示方式:
-
二进制:0,1 ,满2进1.以0b或0B开头。
-
十进制:0-9 ,满10进1.
-
八进制:0-7 ,满8进1. 以数字0开头表示。
-
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
浮点类型
与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响。
Java 浮点类型有两种表示形式
-
十进制数形式,例如: 3.14 314.0
-
科学记数法形式,如 3.14e2 3.14E2
float 4字节 4字节的浮点的容量大于 4字节,8字节的整数
类 型 | 占用存储空间 | 表数范围 |
---|---|---|
float | 4字节 | -3.403E38~3.403E38 |
double | 8字节 | -1.798E308~1.798E308 |
浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F
如:double d = 12345.6; //正确 float f = 12.3f; //必须加f否则会出错
计算机的浮点数是以近似值方式存储
public static void main(String[] args) {
float a=10.2F;
double b=10.3;
System.out.println(b-a);
}
结果:0.10000019073486399
逻辑型boolean(布尔)
boolean类型适合于逻辑运算,一般用于程序流程控制
boolean 类型数据只允许取值 true 或 false
注意:不可以0或非 0 的整数替代false和true
用法举例:逻辑控制语句
boolean flag;
flag = true;
if(flag) {
//do something
}
字符型char
char 型数据用来表示通常意义上的“字符”,char占2字节,字符用单引号括起来的单个字符,例如:
char c1 = ‘a’;
char c2 =‘中’;
可以涵盖世界上所有书面语的字符。
char运算
- char类型在字符编码表中有对应的数值。
- char c=‘a’+1; 先将’a’提升为int,计算结果98,对应的字符是b。
charl类型数据可以参与算术运算
使用字符对应的码换算成ASCII对应的数字进行运算.
ASCII 码
计算机底层,所有数据都使用二进制表示,每一个二进制位(bit)有 0 和 1 两种状态,因此 8 个二进制位就可以组合出 256 种状态.被称为一个字节(byte).
ASCII(ASCII American Standard Code for Information Interchange,美国信息互换标准代码)上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码。
只能表示英文
- 缺点:
不能表示所有字符
Unicode 编码
一种编码,包含世界各个国家的文字字符,使用 Unicode 没有乱码的问题
Java采用unicode编码规范,其中完全包含ASCII编码
UTF-8是针对Unicode的一种可变长度字符编码,在utf-8编码表中,一个中文占3个字节,一个英文占1个字节.
基本数据类型转换
可以从任意基本类型转型到另外的基本类型: boolean 类型不可以转换为其他的数据类型。
-
默认转换:
整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:
byte,short,char->int->long->float->doublebyte short char不会相互准换,但是可以通过int强制转化
-
强制转换:要加上强制转换符要加上强制转换符,但可能造成精度降低或溢出;
int a=10; double b=a; float c=10.2F; double d=c; int v=128; byte f=(byte) v;
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
java运算符
算术运算符: +,-,*,/,%,++,–
字符串连接运算符:+
关系(比较)运算符: >,<,>=,<=,==,!=
逻辑运算符: !,& , | , &&,||
赋值运算符: = ,+ =,- =,* =,/ =
条件运算符
位运算符
算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4; -b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
***** | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模 | 7%5 | 2 |
++ | 自增(前):先运算后取值__自增(后):先取值后运算 | a=2;b=++a;~~a=2;b=a++; | a=3;b=3~~a=3;b=2 |
- - | 自减(前):先运算后取值__自减(后):先取值后运算 | a=2;b=- -a~~a=2;b=a- - | a=1;b=1~~a=1;b=2 |
+ | 字符串相加 | “He”+”llo” | “Hello” |
+ 正数 加法 字符串连接
- 负数 减法
* 乘法
/ 除法
% 取余数
++ 自加
-- 自减
1.example:
+正数 加法 字符串连接
int a=1;
int b=2;
double e=12.21;
char c='a';
String s="22";
System.out.println(a+b);//数值+数值=数值
System.out.println(c+b);//字符+数值=数值
System.out.println(e+s);//数值+字符串=字符串
System.out.println(b+e);/***有多种类型的数据混合运算时,
系统首先自动的将所有数据转换成
容量最大的那一种数据类型
,然后再进行计算***/
结果:
3
99
12.2122
14.21
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
-负数 减法
int d = -10;
System.out.println(a+d);
//结果 -9
* % 数值与数值(char)
System.out.println(b%a);//取余数 判断两个数是否整除则结果为零即余数为零
++自增1 --自减1
int x=5;
x++; //x=x+1 6
++x; //x=x+1 7
--x;//x=x-1 6
x--;//x=x-1 5
System.out.println(x); //输出位5
int k=5;
int l = k++ + 1; //注意: ++在混合运算中 ++在后先运算后自增
//++在前先自增后运算
System.out.println(l); //输出为6
System.out.println(k);//输出为6
++在混合运算中 ++在后先运算后自增 ++在前先自增后运算
比较运算符
==,!=,基本类型数值与数值之间的比较,引用类型与引用类型之间的比较
> < >= <= 数值与数值(char)
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
int a=10;
int b=5;
System.out.println(a==b);//输出 false //基本类型数值之间的比较
System.out.println(a!=b);//输出 true
String s = "ab";
String s1 = "ab";
System.out.println(s==s1);//输出 true //引用类型与引用类型比较
System.out.println(s!=s1);//输出 false
字符型
char c = 'a'; //97
System.out.println('a'>'b');
System.out.println('a'>=c);
逻辑运算符
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
与运算&& . & 有0即为零
int a = 10;
int b = 5;
int c = 15;
System.out.println(a>b & b<c);//true & true = true
System.out.println(a>b & b>c);//true & false = false
System.out.println(a<b & b>c);//false & false = false
System.out.println(a>b && b<c);//true & true = true
System.out.println(a>b && b>c);//true & false = false
System.out.println(a<b && b>c);//false & false = false
& 遇到第一个false后面,后面继续运行
int a = 10;
int b = 5;
int c = 15;
System.out.println(a<b & ++b<c);//false & true = false
System.out.println(b); //b=6
b=6
&&遇到第一个false后面,后面则不运行继续运行
int a = 10;
int b = 5;
int c = 15;
System.out.println(a<b && ++b<c);//false & true = false
System.out.println(b); //b=5
b=5
与运算|| . | 有0即为零
| 遇到第一个true后,后面的表达式还会执行
|| 遇到第一个true后,就会短路后面的表达式不会执行==
int a = 10;
int b = 5;
int c = 15;
System.out.println(a>b | b<c);//true | true = true
System.out.println(a>b | b>c);//true | false = true
System.out.println(a<b | b>c);//false | false = false
System.out.println(a>b || b<c);//true || true = true
System.out.println(a>b || b>c);//true || false = true
System.out.println(a<b || b>c);//false || false = false
异或( ^ ):
- 当左右都为true时,结果为false。
- 理解:异或,追求的是“异”!
赋值运算符
char short char->int ->long ->flaot->double
=
注意:两边类型与值匹配~~int a=10;
基本数据类型转换:默认转换,强制类型转换
long b = a;
byte c = (byte)b;
用法举例 | 等效的表达式 |
---|---|
a += b | a = a+b |
a -= b | a = a-b |
a *= b | a = a*b |
a /= b | a = a/b |
a %= b | a = a%b |
判断:
short s = 3;
(1) s =s+2;
(2) s += 2;
System.out.println(s);
对于(1)来说:S+2运算时会自动提升变表达式的类型,所以结果是int类型的,在赋值给short形的s,编译器会将报告:需要强制转换类型错误
对于(2)由于+=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以理解为正确.
区分好==和=的区别。即===
- 一个等号 对值的比较 Java中相当于赋值
- 两个等会java中相当于 if判断
- 三个等号在java中没有,但是在JavaScript
-
==,两边值类型不同的时候,要先进行类型的转换,再比较。
-
==,不做类型转换的时候,类型不同的一定不等。
==是非严格相等运算符:只比较值是否相等
===是严格相等运算符:既比较值是否相等还比较类型是否相等
条件运算符
(条件表达式)? 表达式1:表达式2;
-
为true,运算后的结果是表达式1;
-
为false,运算后的结果是表达式2;
-
表达式1和表达式2为同种类型
int a = 10;
int b = 5;
int c = (a>b)?a:b; //需要返回一个结果
System.out.println(c); //输出 10
位运算
特点:使用位运算可以大量减少运行开销
是二进制位(bit位) 上的运算, 执行效率高
- << 左移 左移1位相当于*2
- >> 右移
- >>>无符号右移 不需要关心高位上的符号 (如果影响到了符号位,只需要在符号位补0)
int a = 2;
System.out.println(a<<2);// 输出8
最有效率的方法求出2乘几等于8 2<<3,
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移
3位即可,而位运算cpu直接支持的,效率最高,所以,2乘剩以8等於几的最效率的方法是2<<3。
& | 与运算 二进制位进行&运算,只有1&1时结果是1,否则是0; |
---|---|
| | 或运算 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; |
^ | 相同二进制位进行 ^ 运算,结果是0;1**^1=0 , 0^0=0不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1** |
~ | 正数取反,各二进制码按补码各位取反负数取反,各二进制码按补码各位取反 |
练习
int a=5,b=10; 把a与b的值交换(仅使用a,b两个变量)
int a = 10;
int b = 5;
/* a = a+b; //a=10+5 = 15
b = a-b;//b=15-5 =10
a = a-b;
System.out.println(a);
System.out.println(b);*/
/*
1010
0101
1111 a^b 15 用两个数异或后的结果 与其中一个值进行异或操作 其值等于另一个值.
0101
1010
*/
a = a^b;
System.out.println(a);
b = a^b;
System.out.println(b);
a=a^b;
System.out.println(a);