Java基础复习笔记
Java 八大基本数据类型
一共四种整数类型
byte 占一个字节(B)=8bit
int 4个字节
short 2 个字节
long 8个字节
两种小数:浮点数
float 4 个字节 double 8个字节
字符: char 占两个字节
布尔:boolean 只占一bit
String 是引用类型不是关键字
扩展内容
1.进制
// An highlighted block
int i1= 10; 表示十进制
int i2 =010; 表示八进制
int i3 = 0x10; 表示十六进制
2.浮点数
// An highlighted block
float f = 0.1f;
double d= 1.0/10;
System.out.println(f==d);
System.out.println(f);
System.out.println(d);
float d1 =2323232323232323f;
float d2 =d1+1;
System.out.println("浮点数是有限的 离散的 舍入误差 接近但不等于 最好不要用浮点数进行比较");
System.out.println(d1==d2);
运算结果
// An highlighted block
====================================
false
0.1
0.1
浮点数是有限的 离散的 舍入误差 接近但不等于 最好不要用浮点数进行比较
true
所以涉及到银行业务的切记使用正确的数据类型 可以用BigInteger以及BigDecimal
3.字符扩展
// An highlighted block
System.out.println("=====================");
char c1 ='a';
char c2 ='潇';
System.out.println((int)c1);
// An highlighted block
运算结果:
=====================
97
字符本质就是unicode 编码,可以强制转换成数字
4.字符串扩展
面试题
// An highlighted block
System.out.println("=============");
String str1= "asdd";
String str2="asdd";
System.out.println(str1==str2);
String str3 = new String("add");
String str4 = new String("add");
System.out.println("=================================================");
System.out.println(str3==str4);
运算结果
```javascript
// An highlighted block
=============
true
=================================================
false
str1,str2指向常量池 ==比较就是ture,str3,str4 用了new 方法 他们的地址不一样 故而是flase.为了验证 我们用identityHashCode(),打印出哈希值.
System.out.println("=============");
String str1= "asdd";
String str2="asdd";
System.out.println(str1==str2);
System.out.println("=============str1和str2的哈希值");
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
String str3 = new String("add");
String str4 = new String("add");
int a = System.identityHashCode(str3);
int b = System.identityHashCode(str4);
System.out.println("=============str3和str4的哈希值\n"+a);
System.out.println(b);
System.out.println("=================================================");
System.out.println(str3==str4);
结果
=============str1和str2的哈希值
460141958
460141958
=============str3和str4的哈希值
1163157884
1956725890
=================================================
类型转化
分为强制转换 和自动转型。从低容量到高容量是自动转换, 从高容量到低容量用到强制转换 但是有可能发生内存溢出的情况
// An highlighted block
public static void main(String[] args) {
/*
类型转换 byte short char int folat double 小数优先级大于整数
*/
int i = 128;
byte b1 = (byte) i;//内存溢出
System.out.println(b1);
//强制转换 高到低 低到高 自动转换
System.out.println("进度丢失例子======================");
System.out.println((int)28.23);
System.out.println((int)10.22f);
}
注意:
1.布尔值不能进行转换
2.不能对象类型转换成不相干的类型
3.高容量转换为低容量时 强制转换
4.转换时可能出现内存溢出精度丢失的问题
运算时的规则 转换成同一类型在进行计算
System.out.println("=================运算时的规则 转换成同一类型在进行计算=========");
char c = 'a';
int i1 =c+1;
char c1 = (char) i1;
System.out.println(i1);
System.out.println(c1);
运算时默认是int如果运算时数值超过范围 则需要进行强制转换。
public static void main(String[] args) {
//操作数较大时注意溢出问题
//JDK7 新特性 数字之间可以用下划线分割
int money = 10_0000_0000;
byte years = 20;
int total = money*years;//计算结果溢出
long total2 = money*years;//默认int 转换之前就已经出现问题了
long total3 = money*(long)years;//先把一个数转换成long
System.out.println(total);
System.out.println(total2);
System.out.println(total3);
变量
变量声明定义方法
int a=1,b=2,c=3;//可以但是不建议,程序可读性较差
int d =1;
变量分为类变量 局部变量 实例变量
//变量类型 类变量 局部变量 实例变量
//实例变量
String name;
float salary;
//类变量‘
static String peopele;
static boolean flage;
// 常量初始化之后不能再改变 final 是修饰符 不存在前后。 一般用大写字母表示
static final double PI = 3.123123213123;
static public void main(String[] args) {
//局部变量在方法里 且必须声明和赋值
int age =18;
Demon07 demon07 = new Demon07();
//基本数据类型默认值是 0 0.0 布尔是默认flase 引用类型默认 null
System.out.println(demon07.name);
System.out.println(demon07.salary);
System.out.println(peopele);
System.out.println(flage);
System.out.println(PI);
变量命名规范
所有变量,方法,类民 见名知意
局部变量,和方法名 首字母小写和驼峰规则 run run_Time
常量:大写字母和下划线MAX_VALUE
类名 : 首字母大写,和驼峰原则 Man My_Class
运算符
一元运算
//二元运算 ctrl + D 快捷键 复制当前行到下一行
int a =10;
int b =15;
int c =20;
int d =50;
System.out.println(a+b);
System.out.println(c-b);
System.out.println(a*b);
System.out.println((double) c/d);//由于int 只保留整数 所以我就强转一下
System.out.println("============================================");
long l = 123124324324324L;
int i = 1222;
byte b1=10;
System.out.println(l+i+b1);
System.out.println(i+b1);//默认都是int类型
System.out.println("======================关系运算符======================");
int i1 = 10;
int i2 =10;
System.out.println(a>b);
System.out.println(i1==i2);
System.out.println(i1!=i2);
System.out.println("取余运算!!");
//求余运算 后面那个比前面大时 直接输出前面那个数字
int a1 =10;
int c1 = 9;
System.out.println(a1%c1);
一元运算符
++a 和a++的区别 。 a++先赋值 再自增,++a 先自增 再赋值
public static void main(String[] args) {
// ++ -- 一元运算符
int a =2;
int b ;
int c =3;
b = a++; //先赋值 再自增
System.out.println(b);
System.out.println(a);
c =++a;//先自增 再赋值
System.out.println(a);
System.out.println(c);
逻辑运算符
与 或 非
短路运算 && 前一个是假 就直接返回结果 ||有一个为真 就返回结果
// An highlighted block
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));
//短路运算 && 前一个是假 就直接返回结果 ||有一个为真 就返回结果
int c = 4;
int c1 = 3;
boolean d =(c<3) && (c++<4);
boolean d2 = (c<7) || (c1--<1);
System.out.println(d);
System.out.println(c);
System.out.println(d2);
System.out.println(c1);
}
位运算
A = 0011 1100
B = 0000 1101
A&B 0000 1100 A与B 全11为1
A|B 0011 1101 A或B 全00为o
A^B 0011 0001 异或 相同为0 不同为1
~B 1111 0010
面试题:28 怎么运算最快? 28 = 16 (222)
用位运算 效率极高!!!!
0000 0001 1
0000 0010 2
0000 0100 4
。。。。
0001 0000 16 2<<3 就是2的二进制左移三位
面试题:int a =97 字符串连接符 “” + a 和a+“”
字符串连接符 “” + String 和运算顺序有关 + 运算从左往右 如果先是字符串 就是拼接符号 . 可以添加一个()括号
// An highlighted block
public static void main(String[] args) {
int a=10,b=20,c=30;
a+=b;//a=a+b
c-=b;//c=c-b
System.out.println(a);
System.out.println(c);
System.out.println(a+b+"");
System.out.println("" +a+b);
System.out.println(""+(a+b));
}
三目运算
x?y:z;如果x是ture 则y 否则z
// An highlighted block
System.out.println("=======================三目运算===============================");
int score = 50;
String type = score<60 ? "不及格": "及格";
System.out.println(type);