常量的分类:二进制、八进制、十进制、十六进制
按数据类型分类,可分为基本数据类型和应用数据类型
基本数据类型可分为4类8种,4类是整型、浮点型,字符型、布尔型,其中整型包括byte、short、int、long,浮点型包括float、short,字符型为char,布尔型为boolean
//数据类型是干啥的?
//限定 变量 定义中 数据的类型和范围
public static void main(String[] args) {
//数据类型:基本数据类型、引用数据类型
//基本数据类型 4类8种
//数据格式(数据表达内容不同) 占用字节 表达范围
//整型(整数)
/* byte 1 -128~127
short 2 -23768~32767 万3
int 4 -2147483648~2147483647 21亿
long 8 -2^63 10*10的19次方 */
//
byte b=15;
// byte b1=1111;//报错,超出范围
System.out.println(b);
short s=9000;
short s1=15;//byte->short,只要在范围内就能接收
short s2='H';
System.out.println(s+" "+s1+" "+s2);
int i=9527;
int renkou=1400000000;//14亿
//默认写出来的 整数数据 是int类型
// int quanqiurenkou=7000000000;//整数数据默认是int类型,最大21亿
System.out.println(i+" "+renkou);
long l=700000000000000L;//默认整数4个字节,需要申请8个字节空间,32位
System.out.println(l);
//浮点型(小数)
//数据格式(数据表达内容不同) 占用字节 表达范围
/*float(单精度) 4 1.4*10的-45次方 ~ 3.4*10的38次方
double(双精度) 8 4.9*10的-324次方 ~ 1.7*10的308次方 */
//默认小数是double类型,也就是占用了八个字节
// float f=3.14;//3.14默认用8个字节,float只有四个
//3.14用四个字节 存储 解决,加上一个F
float f=3.14f;
System.out.println(f);
double d=3.1415926535;
System.out.println(d);
//字符型(字符) 一个字符在内存中占用两个字节---16位二进制【0-65535】
//字符占用两个字节 -- 字符对应有一个数字表达式
//char
char c='a';//字符a 在内存中 存到了字节里(二进制数据)
System.out.println(c);
System.out.println(c+0);//字符 对应 数字(2->10)
//布尔型(真假)
//boolean
boolean flag=true;
System.out.println(flag);
字符常量' '有且只有一个字符
字符串常量""可以有内容,也可以没有内容
数据在计算机底层通过二进制存储,采取逢二进一的特点
进制转换
十进制转二进制:再用除二取余法
二进制转十进制:8421法,主要表现为2的0次方开始,一直加到2的n次方
八进制表现形式为每三位二进制作为一个单元,其构成主要为0~7
十六进制的表现形式为每四位二进制作为一个 存储单元,其构成主要为0~15,其中10~15的表现形式为A、B、C、D、E、F
默认情况下,整数是int类型,如果说整数数量过大,long类型接受,需要加L、l提升到long类型
小数是double【8字节】类型,如果想要使用float【4字节】类型接收,需要加F、f转换为float类型
计算机的最小存储单位是字节(Byte),一个字节占8位(bit)
数据的大小转换表现为1024=2^10
字符在计算机中并不是直接存储,而是把字符编为一个整数,存储对应的二进制形式,这样的一个对应关系表,就叫做ASCII码表
字符0对应48,其后依次加1
字符a对应97,其后依次加1
字符A对应65,其后依次加1
类型转换,即数据的类型发生了变化
类型转换又分为自动类型转换,表达式类型转换和强制类型转换,
自动类型转换:范围小的变量,直接赋值给范围大的变量
byte -> short -> int -> long -> float -> double
char ->
表达式类型转换:表达式的最终类型由最高类型决定
主要表现:
在表达式中,byte、short、char直接转换位int类型参与运算。即小范围类型自动转换为大范围类型
强制类型转换:范围小的类型去接收范围大的类型数据
默认会报错,只是在强制的执行
正确的书写格式:小数据类型 变量=(小数据类型)变量/数据;
一般不建议使用强制类型转换:
会出去数据丢失
小数强制转换为整数,直接截断小数 保留整数
int cc=99;
char ccc=(char)cc;
System.out.println(ccc);//c
原理:强行把前面几个字节砍掉,有数据丢失风险
算术运算符包括加(+)、减(-)、乘(*)、除(/)、取余(%)
在算术运算符中,尤其注意:整数做除法,其结果还是整数
+符号除了参与加法运算,还可以做拼接使用,如果+与字符串参与运算,其结果依然是一个字符串
int a=10;
int b=2;
System.out.println(a+b);//12
System.out.println(a-b);//8
System.out.println(a*b);//20
System.out.println(a/b);//5
System.out.println(a%b);//0
//除法运算 如果不能整除,得到只能是商
int c=100;
int d=33;
System.out.println(c/d);//3.0303030303....整数相除只能是整数
//c整数 1.0小数 整体是小数
System.out.println(c*1.0/d);
System.out.println(c%d);
//"+"连接符
System.out.println("+号妙用:+号左右两边连上了字符串 整体变成字符串");
System.out.println("abc"+5);//abc5
System.out.println("abc"+"5");//上下结果一样
int e=5;
System.out.println(e+5);//10
System.out.println(e+"5");//55
//+号左右两边连上了字符串 整体变成字符串
System.out.println("ad"+e+'c');//ad+5+c
System.out.println('c'+e+"ad");//99+5+ad
数值拆分操作
int ge=number%10;
int shi=number/10%10;
int bai=number/100%10;
int qian=number/1000%10;
System.out.println("个位数:"+ge);
System.out.println("十位数:"+shi);
System.out.println("百位数:"+bai);
自增自减运算符
++ -- 都可以用在 变量前后
如果是单独使用,前后没有影响
如果参与运算
++在变量前 先自增再参与运算
++在变量后 先运算再自增
同理
--在变量前 先自增再参与运算
--在变量后 先运算再自增
赋值运算符:+=、-=、*=、/=
基本赋值运算符 "=",从右往左看
扩展赋值运算符
byte x=10;
byte y=10;
x=x+y;//byte一旦参与运算编程int类型了,不能用byte类型接收
byte x=10;
byte y=30;
x+=y;//可以 自带强制转换 x=(byte)(x+y)
关系运算符:>、>=、<、<=、==、!=,主要表现为true、false
逻辑运算符:&、|、!、^、&&、||
//& 并且 特点:有false则false
//| 或者 特点:有true则true
//! 取反 特点:你真我假 你假我真
//^·相同为false,不同未true【同性相斥,异性相吸】
// &&:短路与 执行到一半知道结果就不继续了 好比刮奖 刮到谢...就不往下继续了
// &:不管结果如何,继续往下 好比刮奖 刮到谢...继续刮到谢谢惠顾
// ||:短路或,知道一半结果就不行
// |:不短路,不管前面结果如何,继续往下执行
//需求1:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
//需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
public class OperatorDemo5 {
public static void main(String[] args) {
// 目标:掌握逻辑运算符的使用。
// 需求:要求手机必须满足尺寸大于等于6.95,且内存必须大于等于8.
double size = 6.8;
int storage = 16;
// 1、& 前后的条件的结果必须都是true ,结果才是true.
boolean rs = size >= 6.95 & storage >= 8;
System.out.println(rs);
// 需求2:要求手机要么满足尺寸大于等于6.95,要么内存必须大于等于8.
// 2、| 只要多个条件中有一个是true,结果就是true.
boolean rs2 = size >= 6.95 | storage >= 8;
System.out.println(rs2);
// 3、!取反的意思
System.out.println(!true); // false
System.out.println(!false); // true
System.out.println(!(2 > 1)); // false
// 4、^ 前后条件的结果相同时返回false,不同时返回true.
System.out.println(true ^ true); // false
System.out.println(false ^ false); // false
System.out.println(true ^ false); // true
System.out.println(false ^ true); // true
// 5、&& 左边为false,右边不执行。
int i = 10;
int j = 20;
// System.out.println(i > 100 && ++j > 99);
System.out.println(i > 100 & ++j > 99);
System.out.println(j);
// 6、|| 左边是true ,右边就不执行。
int m = 10;
int n = 30;
// System.out.println(m > 3 || ++n > 40);
System.out.println(m > 3 | ++n > 40);
System.out.println(n);
}
}
三元运算符:关系表达式?值1:值2;
运算优先级
&&运算比||运算的优先级高,如果说想要提高优先级,可以通过添加()来实现