Java基础复习(二)

1、java中的数据类型【数据的单位】:
java是一个强类型的编程语言 所有的变量在第一次出现的时候,必须有数据类型

面试题:
java中的数据类型分为几种?
2种、无数种

基本数据类型 简单数据类型[程序里面自带的数据类型]

面试题:
基本数据类型分为几种
4类8种

布尔类型:boolean 只能使用true/false进行赋值
不能使用数字进行赋值

应用场景:
判断一个数字是不是偶数
判断一个人的性别是不是男生

boolean x = true
boolean y = false;

字符类型:char 底层基于Unicode编码实现的
不区分中英文 统一都是2个字节 = 16位

应用场景:长度为1的元素
一个英语单词的首字母 -> char


char x1 = 'a';//指定字面值的赋值方式
char x2 = '中';//指定字面值的赋值方式
char x3 = '\t';//转义字符
\t	   \r	  \b	\n
制表符 返回行首 退格键 换行
char x4 = 55;//通过ascii编码进行赋值【0-65535】
char x5 = '\u4e2d';//通过Unicode编码进行赋值

整数类型:符号位[1] + 数值位[n-1]
取值范围:-2(n-1)到2(n-1)-1

n-1:符号位占用一个位
-1:0占用一个位

应用场景:
一个人的年龄
描述年份 、 月份 、 天数
保质期
人口数

byte short int	long
	位	 8	 16	   32	64
	字节  1	 2	   4	8


  • *:整数类型默认是int类型
  • *:long类型结尾的时候需要加L/l 尽量写L
  • *: 如果一个数值超出int类型最大边界的话 注意使用long类型
int num1 = 55;//十进制进行赋值
int num2 = 055;//八进制进行赋值	0【0-7】
int num3 = 0x55;//十六进制进行赋值 0x[0-9 a-f]
int num4 = 0b1011;//二进制进行赋值 0b[0-1]

范围
byte:-128 127
short:-32768 32767
int:-2147483648 2147483647
long:-XXXXXXXXX XXXXXXXX

浮点类型:符号位 + 幂值位 + 数值位
工资 4500.0
单价: 45.0

float double
32 64
*
F/f D/d

float:符号位1 + 幂值位8 + 数值位23
double:符号位1 + 幂值位11 + 数值位52

整数类型二进制之间的转换

浮点类型和二进制之间的转换

十进制和二进制之间的转换

引用数据类型 自定义数据类型[程序员自己开发的数据类型]

//随机的三位数:
int x = (int)(Math.random() * 900 + 100)
//随机的小写的字母a-z:
char y = (char)(Math.random() * 26 + 97)
//随机的大写的字母:A-Z
char z = (Math.random() * 26 + 65)

java中的运算符
+ - * / %
[+:当+遇到String类型的时候 不再表示算数加法 而是表示追加连接]

int num = 45;
String x = num + "";
  • [*:当心数值超出int类型最大边界 注意使用long类型] System.out.println(365L * 24 * 60 *
    60 * 1000);
  • [/:当整数除以整数的时候 结果一定是整数] 7 / 2 = 3
  • [%:取模运算符 求余数 最终结果的符号位取决于参与运算的第一个数的符号] x % 8 == 0
    *+= -= = /= %=…
    [他们可以保证运算符的左边的数据类型不发生改变 -> 隐式的强制转换
    面试题:
short x = 1;
x = x + 1;//可能损失精度
System.out.println(x);//报错
short y = 1;
y += 1;//y = (short)(y + 1);
System.out.println(y);//2

++ – [自增自减运算符]
[a:取值 b:运算 x++:ab ++x:ba]
> < >= <= ! = != ==
> < >= <= : 判断大小 -> boolean 值:true/false
!:非 !boolean !true = false !false = true
!=:判断左右两边的值是否不相等

System.out.println(45 != 55);//true

=和==之间的区别?
=:赋值运算符 将右边的值交给左边的变量保管

int x = 45;

==:判断左右两边的值是否相等

System.out.println(45 == 55);//false

&& || & |[逻辑运算符]

面试题:
&&和&之间的区别?
相同点:&&和&都是逻辑的与 相当于汉文字并且的意思
需要前后两个条件都成立才可以

不同点:&&叫做逻辑的短路与 有短路特性
短路特性:如果通过前面的条件可以得出最终结果的话
后面的条件直接舍弃 不再判断

面试题:
||和|之间的区别?
相同点:||和|都是逻辑的或 相当于汉文中或者的意思
需要前后一个条件成立就可以

不同点:||叫做逻辑的短路或 有短路特性
短路特性:如果通过前面的条件可以得出最终结果的话
后面的条件直接舍弃 不再判断

& | ^ ~ [按位运算符]

基础应用:
&:按位的与 要求上下二进制都是1的时候才写
|:按位的或 要求上下只要有1就写1
^:按位的异或 要求上下不一样的时候就写1
~:按位的取反
&:在某些情况下可以取代%
当我们拿着一个正数%上2的n次方数的时候
结果等价于
我们拿着这个正数&上2的n次方数-1的结果

System.out.println(100 % 8);//xxxx
System.out.println(100 & 7);//二进制
**&**:可以再某些情况下取代%
	x % 2(n) == x & 2(n)-1
	x % 2 == 0 -> (x & 1) == 0
	x % 4 == 0 -> (x & 3) == 0

^: 可以不借助第三块空间的方式交换两个变量的值

int x = 45;
int y = 90;
//创建第三块空间
int z = x;
x = y;
y = z;
//不创建第三块空间
x = x ^ y;
y = x ^ y;
x = x ^ y;

只能使用char byte short int long boolean

<< >>[位[二进制]移运算符]
<<相当于乘以 >>相当于除以
移动多少位相等于乘以/除以2的几次方数
*2 *4 *8 *16…*2(n)
<<1 <<2 <<3 <<4…<<n

/2 /4 /8 /16…/2(n)
>>1 >>2 >>3 >>4…>>n

在计算机里面 如何高效的求出2的3次方数?
2 << 1 << 1
2 << 2
在计算机里面如何高效的求出2的31次方-1的结果
2 << 30 - 1

? : [三目运算符 三元运算符]
boolean ?2 :3
第一部分需要放一个boolean类型的判断句
如果第一个为true 那么执行第二部分
如果第一部分为false 那么执行第三部分