Java数据类型
变量
变量的概念:记录一个可变的数据
使用流程:
1、声明:
语法:数据类型 变量名;
2、赋值:
语法:变量名 = 值;
注意:①等号两边数据类型要一致;②变量第一次赋值称为变量的初始化;
3、使用:直接使用变量名
特殊用法:
1、一次可以声明多个变量
注意:变量的数据类型一致
语法:数据类型 变量名1,变量名2,.....;
2、变量在声明时,可以第一次赋值
注意:同一个作用域中,变量名不能重复
数据类型:
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
基本数据类型:
1、byte:字节、占1字节
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
例子:byte a = 100,byte b = -50。
2、short:短整型、占2字节
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;
例子:short s = 1000,short r = -20000。
3、int:(默认)占4字节
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
例子:int a = 100000, int b = -200000。
4、long:长整型、占8字节
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是 0L;
例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写;
注意:如果超出int取值范围的数要加1或L。
5、float:单精度浮点型、占4字节
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f;
注意:如果需要将小数设定为float型,需要给小数后加f或F。
6、double:双精度浮点型(默认)、占8字节
数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
浮点数的默认类型为 double 类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:
double d1 = 7D ;
double d2 = 7.;
double d3 = 8.0;
double d4 = 8.D;
double d5 = 12.9867;
7是一个 int字面量,而7D、7. 和 8.0 是 double 字面量。
7、boolean:布尔型、true(真)false(假)
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。
8、char:Java中的字符要使用''包裹,如'a','中','1'
char 类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(十进制等效值为 0);
最大值是 \uffff(即为 65535);
char 数据类型可以储存任何字符;
例子:char letter = 'A';。
引用数据类型:
在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用任何与之兼容的类型。
例子:Site site = new Site("Runoob")。
转义字符:
\':单引号
\":双引号
\\:\
\t:制表符
\n:换行符
类型转换:
基本数据类型转换
小类型转换为大类型,会自动转换,没有风险
大类型转小类型,要强制转换,有风险
强制类型转换语法:转换后的数据类型 变量名 = (转换后的数据类型) 要转换的数据;
基本数据类型转换为字符串
基本数据类+字符串都是字符串
运算符:
字符串连接符:所有基本数据类型使用+与字符串拼接,结果都是字符串。
算术运算符:
+ 加法——相加运算符两侧的值
- 减法——左操作数减去有操作数
* 乘法——相乘操作符两侧的值
/ 除法——左操作数除以右操作数
% 取余——左操作数除以右操作数的余数
++ 自增:操作数的值增加1
-- 自减:操作数的值减少1
public class Demo01 {//算术运算符public static void main(String[] args) {int a = 10;int b = 20;int c = 25;int d = 25;System.out.println("a + b = " + (a + b) );System.out.println("a - b = " + (a - b) );System.out.println("a * b = " + (a * b) );System.out.println("b / a = " + (b / a) );System.out.println("b % a = " + (b % a) );System.out.println("c % a = " + (c % a) );System.out.println("a++ = " + (a++) );System.out.println("a-- = " + (a--) );// 查看 d++ 与 ++d 的不同System.out.println("d++ = " + (d++) );System.out.println("++d = " + (++d) );}}
自增自减运算符:
1、自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算
public class Demo02{public static void main(String[] args){int a = 3;//定义一个变量;int b = ++a;//自增运算int c = 3;int d = --c;//自减运算System.out.println("进行自增运算后的值等于"+b); System.out.println("进行自减运算后的值等于"+d);}}
注意:
1、int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4
2、int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2
2、前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
3、后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算 实例:
public class Demo03{public static void main(String[] args){ int a = 5;//定义一个变量; int b = 5; int x = 2*++a; int y = 2*b++; System.out.println("自增运算符前缀运算后a="+a+",x="+x); System.out.println("自增运算符后缀运算后b="+b+",y="+y); }}
注意:小类型与大类型进行运算,运算结果为大类型。
关系运算符:
<:小于
>:大于
<=:小于等于
>=:大于等于
==:判断符号两边是否相同
!=:判断符号两边是否不相同
public class Demo04 {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("a == b = " + (a == b) );System.out.println("a != b = " + (a != b) );System.out.println("a > b = " + (a > b) );System.out.println("a < b = " + (a = a = " + (b >= a) );System.out.println("b <= a = " + (b <= a) );}}
逻辑运算符:
&:与,同真为真,有假为假
&&:短路与,同真为真,有假为假
|:或,有真为真,同假为假
||:短路或,有真为真,同假为假
!:非,非真为假,非假为真
使用逻辑运算符连接的表达式称为布尔表达式
public class Demo05 {public static void main(String[] args) {boolean a = true;boolean b = false;System.out.println("a && b = " + (a&&b));System.out.println("a || b = " + (a||b) );System.out.println("!(a && b) = " + !(a && b));}}
字符串判断内容是否相同
1、字符串或字符串变量.equals(字符串或字符串变量)
注意:引用数据类型使用==判断,只判断内存地址是否相同
赋值运算符:
= 简单的赋值运算符,将右操作数的值赋给左操作数
+= 加和赋值操作数,它把左操作数和右操作数相加赋值给左操作数
-= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
*= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
/= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
&= 按位与赋值运算符
^= 按位异或赋值操作符
|= 按位或赋值操作符
%= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数
public class Demo06 {//赋值运算符public static void main(String[] args) {int a = 10;int b = 20;int c = 0;//赋值运算符:+c = a + b;System.out.println("c = a + b = " + c );//赋值运算符:+=c += a ;System.out.println("c += a = " + c );//赋值运算符:-=c -= a ;System.out.println("c -= a = " + c );//赋值运算符:*= c *= a ;System.out.println("c *= a = " + c );a = 10;c = 15;//赋值运算符:/=c /= a ;System.out.println("c /= a = " + c );a = 10;c = 15;//赋值运算符:%=c %= a ;System.out.println("c %= a = " + c );//赋值运算符:&=c &= a ;System.out.println("c &= a = " + c );//赋值运算符:^=c ^= a ;System.out.println("c ^= a = " + c );//赋值运算符:|=c |= a ;System.out.println("c |= a = " + c );}}
三目运算符(三元运算符)
布尔表达式?值1:值2;
当布尔表达式值为true返回值1,否则返回值2
数据类型的强制转换:
1、类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生。
a、赋值和方法调用 转换规则:从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换:
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double;
b、算术运算 中的类型转换:
1、基本就是先转换为高位数据类型,再参加运算,结果也是最高位的数据类型;
2、byte short char运算会转换为Int;
(1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
(2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
(3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
(4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。
特殊:
(1)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。
(2)当运算符为自动递增运算符++或自动递减运算符--时,如果操作数为byte,short或char类型不发生改变;十进制
public class Demo07{public static void main(String[] args){ //强制转换:double转int double m = 30.15; int h; h = (int)m; System.out.println(h); //强制转换:double转int double k = 18.99; int g = (int)k; System.out.println(g); //强制换:int转double int x=80; double y = x; System.out.println(y); //强制转换:int转double int q = 63; double w = (double)q; System.out.println(w); }}
进制转换(扩展)
十进制:00,01,02,03,04,05,06,07,08,09,10
二进制:0,1,10,11,100,101,110,111,1000
八进制:0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20
十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10
10进制转8进制:用10进制数除8,余数倒着读
10进制转16进制:用10进制数除16,余数倒着读
10进制转2进制:用10进制数除2,余数倒着读