1. Java中的两大数据类型
1.1、基本数据类型[8种]
1.1.1、byte-> 1个字节 -128~+127 最高位为符号位1为负,0为正
1.1.2、short ->2个字节 -32768~+32767
1.1.3、int->4个字节 ;整型数据默认类型是int
1.1.4、long ->8个字节
//long l = 7777777777777777;//错误:过大的整数
long l = 77777777777l;//修改:l和L都可
1.1.5、float ->4个字节
float f = 5.65f;//需要加f或F
1.1.6、double->8个字节;
在java中所有浮点型数值默认为double类型;相同字节数的浮点类型数据比整型的数据类型保存的数值要大?
科学计算法的表示:
5100.00 ---> 5.1*10^3 ---->5.1e3
double demo = 5.1e4;//科学计数法
1.1.7、布尔:->boolean true|false
//布尔--true|false
boolean bitem = (2>3);
System.out.println("bitem"+bitem);
1.1.8、char ->16个字节
可以存放中文,是以ASCII的形式编码
字符类型数据在程序中是以什么形式保存?(字母、标点符号、数字)
--char可以存放中文 中文使用了UTF-8编码进行存放
--使用UTF-8形式的编码 ‘\uxxxx’
比如:中---->'\u4e2d'
//char--单字符,使用(单引号)‘’ ASCII->unicode(万国码)
char citem = 'c';
System.out.println("citem"+citem);
//可以进行加减运算
int iItem = citem;
System.out.println("iItem = "+item);
//万国码 unicode
char citem1 = '\u4e2d';
System.out.println("citem1 = "+citem1);
//基本数据类型
public class date{
//程序入口 main方法 在Java中声明一个变量,必须指定类型
//1、整型数据默认类型是int【不能直接大的赋值给小的】
public static void main(String[] args){
//输出语句 Java强类型
byte b = 18;//-128~127
short d = 189;//-32768~32767
int g = 555;
//long l = 7777777777777777;//错误过大的整数
long l = 77777777777l;//l和L都可
System.out.println("b="+b);//输出b=18
//错误:不兼容的类型,从int转byte可能会有损失
//不确定性:不确定两个变量相加后的结果,所以编译出错
byte item1 = 1;
byte item2 = 2;
//byte item3 = item1 + item2;
byte item3 = (byte)(item1 + item2);//强制转型
System.out.println(item3);//输出3
//浮点数:小数类型--单精度--双精度
//2、浮点数默认double类型
float f = 5.65f;//需要加f或F
double d1 = 4450.66;
double demo = 5.1e4;//科学计数法
System.out.println("f="+f);//输出f=5.65
System.out.println("d1="+d1);//输出d=4450.66
System.out.println("demo="+demo);//输出demo=51000.0
//布尔--true|false
boolean bitem = (2>3);
System.out.println("bitem"+bitem);//输出bitemfalse
//char--单字符,使用(单引号)‘’ ASCII->unicode(万国码)
char citem = 'c';
System.out.println("citem"+citem);//输出citemc
//可以进行加减运算
int iItem = citem;
System.out.println("iItem = "+item);//输出99
//万国码 unicode
char citem1 = '\u4e2d';
System.out.println("citem1 = "+citem1);//输出中
}
}
2.自动类型提升顺序:小容量的数据类型可以赋值给大容量的数据类型
2.1、基本类型提升的顺序1 :
byte-->short-->int-->long-->float-->double
2.2、基本类型提升的顺序2 :
char-->int-->long-->float-->double
2.3、表达式中的自动类型提升:
表达式中的类型自动提升 首先小类型会提升为大类型,然后再进行运算
注意:大容量的数据类型赋值给小容量的数据类型会有类型兼容问题,不能直接赋值,除非通过强制类型转换
强制转换语法格式:
类型1 变量a = (类型1) 变量b
类型1 变量a = (类型1) (表达式)
浮点类型的数据19.895989赋值给int类型,得到的结果:->19【原因将浮点型数据强制转换为int类型 截取掉后面的小数,不存在四舍五入的说法,所以得到是19】
3、运算符的使用
3.1、算术运算符 + - * / %
+的作用:实现加法运算,实现字符串的拼接
扩展后的赋值运算符中包含强制类型转换操作 如
item += 3;不完全等于item = item +3;
而是等于item = (item的类型)(item +3);
3.2、位运算符
左移n位就乘2^n 双目运算符 案例 : 8向左移动一位,低位补0
有符号右移如3>>1 得到1 高位补符号位
无符号右移 高位补0
public class Date {
public static void main(String[] args){
// float a = 3;
// int b = 4;
// int score = 0;
// score += a;
// System.out.println(score);
//&按位与;同时为1才返回1
int a = 0b00001100;
int a1 = -4;
int b = 0b00000111;
System.out.println("a&b"+'\t'+(a&b));//->0b 0000 0100
//|按位或;有一个为1即返回1
System.out.println("a|b"+'\t'+(a|b));//->0b 0000 1111
//~按位非;单目运算符,将操作数的每个位全部取反,包括符号位
System.out.println("~a"+'\t'+(~a));//->0b 1111 0011
//^异或,相同时返回0,不同时返回1
System.out.println("a^b"+'\t'+(a^b));//->0b 0000 1011
//左移 低位补0
System.out.println("a<<2"+'\t'+(a<<2));//a:0b 0000 1100->ob 0011 0000
//有符号右移 高位补符号位正数补零,负数补1
System.out.println("a>>2"+'\t'+(a>>2));//正数a:0b 0000 1100->ob 0000 0011
//负数a1=-4; 右移两位-> 负数-1
// 源码0b 0000 0000 0000 0000 0000 0000 0000 0100 源码0b 0000 0000 0000 0000 0000 0000 0000 0001
// 反码0b 1111 1111 1111 1111 1111 1111 1111 1011 反码0b 1111 1111 1111 1111 1111 1111 1111 1110
// 补码0b 1111 1111 1111 1111 1111 1111 1111 1100 补码0b 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println("a1>>2"+'\t'+(a1>>2));
//0000 1000->0000 0010
//无符号右移 高位补0
System.out.println("a>>>2"+'\t'+(a>>>2));//a:0b00001100->ob 0000 0011
}
}
3.3、比较运算符(短路和非短路的概念)
> < >= <= == !=
3.3.1、逻辑运算符
短路与&& 如果前面的表达式为假,则后面不需要在判断,直接短路
短路或|| 前面为真,则直接短路,不执行后面的逻辑判断
非短路与和或 要执行全部的逻辑判断
//逻辑运算符
//非短路 与和或 执行全部的逻辑运算
if((2>3)&(3>2)){
System.out.println("非短路与");
}
if((2>3)|(3>2)){
System.out.println("非短路或");
}
//短路与和或 执行部分的逻辑运算
if((2>3)&&(3>2)){
System.out.println("短路与");
}
if((2>3)||(3>2)){
System.out.println("短路或");
}
3.3.2、三目运算符(三个操作元素,相当于判断语句)
书写格式:(逻辑表达式)?数值1:数值2
如果表达式为真->则赋值数值1,为假则赋值数值2
//大于85 A 大于60 B 其余 c
int score = 80;
String level = score>85?"A":(score>60?"B":"C");
System.out.println(level);
//三目运算符的嵌套:
//>=90优秀 >=80良好 >=60及格 其余不及格
String le = score >=90?"优秀":(score>=80?"良好":(score>=60?"及格":"不及格"));
System.out.println(le);
3.4、自增自减操作
++在变量的后面,所以先进行算术运算再进行自增操作
++在变量的前面,所以先进行进行自增操作再算术运算
如果自增或自减符号和其他运算符一起操作时,会有顺序的先后:
int i = 3
int item = 3+i++;//item = 3+3;-->i=4;
int item = ++i+3;//i=4-->;item = 4+3;