JavaSE内容整理二

数据类型与运算符

一、数据类型
数据类型分为基本数据类型和引用数据类型。
基本数据类型:4类8种
引用数据类型:除了基本数据类型就是引用数据类型。
二、堆、栈、常量池、方法区
在这里插入图片描述

栈:基本数据类型、引用数据类型的引用
堆:引用类型实例的成员变量(new出来的)。
常量池:使用=号赋值的String类型、使用=号赋值并且在byte(-128~127)取值范围内的包装器类型。
三、数据类型–基本数据类型
在这里插入图片描述

1、基本数据类型注意:
(1)默认值:整型–0 小数–0.0 char–\u0000相当于空字符’’ boolean–false
(2)如果没有声明,一个小数默认是double,整数默认是int。
(3)如果是整数,使用int,例如:年龄;如果是小数,使用double,例如:价格;如果可以有一个字符标识,使用char,例如:性别、状态;如果是字符串,使用String,例如:姓名。
(4)char采用unicode编码,无符号位整数,一个英文和字母各占1个字节,汉字占 2个字节。使用’’引用单个字符赋值;也可以使用非负整数进行赋值。
(5)float赋值需要加f eg:float f = 3.2f
(6)long 赋值需要加l eg:long l = 2147483648l
(7)转换成二进制来计算,所以会有精度缺失的问题。
eg:System.out.println(0.3 == 0.3f); //false 小数转二进制2 0.3 0.6 1.2 2.4
System.out.println(0.5 == 0.5f); //true 0.5
2=1,所以0.5f和0.5d相等
System.out.println(1-0.7); //0.30000000000000004
(8)存在i+1<i这样的数吗?存在,边界值的时候.
2、类型转换:
(1)自动转换/隐式转换:低精度–>高精度 eg:byte b=1;int i=-2;i=b;
(2)强制转换/显式转换:高精度–>低精度 eg:b=(byte)i;
3、比较运算
(1)可以使用==、!=、>、<、>=、<=对基本数据类型的数值进行比较运算;
(2)比较的是数值的二进制.
double d1 = 1.0d;
float d2 = 1.0f;
System.out.println("d1d2 "+(d1d2)); //true
System.out.println("d1!=d2 "+(d1!=d2)); //false
System.out.println("d1>d2 "+(d1>d2)); //false
System.out.println("d1<d2 "+(d1<d2));//false

double d3=0.3d;
float d4=0.3f;
System.out.println("d3d4 "+(d3d4)); //false
System.out.println("d3!=d4 "+(d3!=d4)); //true
System.out.println("d3>d4 "+(d3>d4));//false eg:0.67(float) 0.66…7(double)
System.out.println("d3<d4 "+(d3<d4)); //true
四、数据类型–引用数据类型
1.引用数据类型和基本数据类型的差异
在这里插入图片描述

2.引用类型的赋值和比较运算
(1)除了String、包装器类(共8个)外,都需要使用new 关键字;
(2)String、包装器类可以使用=号赋值,也可以使用new赋值;
(3)可以使用==和!=比较,引用数据类型比较的是地址;基本数据类型比较的是值
(4)引用类型不能使用>、>=、<=、<进行比较;
3.包装器类型
在这里插入图片描述
(1)每一种基本数据类型都对应着一种包装器类型
(2)装箱:基本数据类型转换为包装器类型;拆箱:包装器类型转换为基本数据类型。jdk1.5以后支持自动封解箱操作。
eg:int i = 10;Integer in1 = 13;i = in1;in1=i;可以直接赋值,不用new
(3)在自动装箱拆箱过程中,只有数值是byte(-128–127)范围内的时候,才使用到常量池,否则都是分配新的内存空间;
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

(5)应用场景:字符串转换int类型 int ageChange = Integer.parseInt(age);
字符串转换成double类型 double score = Double.parseDouble(score);

4.String类型
(1)String类被final修饰,不能被继承。
(2)String类型=号赋值和new赋值的区别
在这里插入图片描述在这里插入图片描述
(3)String类型的不可变性:一旦字符串被创建后,就不可被修改
length():获取字符串的长度
在这里插入图片描述在这里插入图片描述
(4)String类型常用方法
length():获取字符串的长度

5.StringBuffer、StringBuilder
(1)StringBuffer必须用new创建对象,它是可变的类;
在这里插入图片描述
(2)String、StringBuilder、StringBuffer的区别
String类是不可变的,对象一旦被创建,就不能被修改;可以使用=直接赋值,此时使用常量池;也可以使用new创建,不使用常量池;
StringBuffer是可变的,对象创建后,可以修改;必须使用new关键字;
StringBuilder是不同步的,在单线程情况下使用比StringBuffer高效;必须使用new关键字;

6.一维数组
(1)数组的定义:数组是一组类型相同的数据的集合;可以存储多个数据,但是数据的类型必须相同
(2)类型:数组本身是引用类型,可以存储基本数据类型,也可以引用数据类型。
(3)注意:1.Java的数组长度一经确定不能改变;定义的时候就要确定长度
2.数组中的元素有索引值,索引值从0开始
(4)声明语法:数组元素类型[ ] 变量名称;或 数组元素类型 变量名称[ ] ,建议第一种
eg:int[] a; int b []
(5)初始化:1.数组元素类型[ ] 变量名称=new 数组元素类型[数组长度];
eg:int[] a = new int[10];
2.数组元素类型[ ] 变量名称=new 数组元素类型[]{用逗号隔开元素的具体值};
eg:String[] arystr = new String[]{“a”,“b”,“c”};
3.数组元素类型[ ] 变量名称= {用逗号隔开元素的具体值};
eg:char[] arychar ={‘a’,‘b’,‘c’};
(6)使用数组:1.数组名[索引] 索引从0开始,可以赋值,可以取值
2.length属性:获取数组的长度
(7)数组遍历:for 增强for循环 while
(8)数组的排序:Arrays.sort() 排序
在这里插入图片描述
7、二维数组
(1)二维数组定义:数组的元素是数组
(2)语法:数组元素类型[ ][ ] 变量名称=new 数组元素类型[一维长度] [二维长度];
eg:int[][] a = new int[2][3]; //创建二维数组 {{0,0,0},{0,0,0}}
或者int[][] b = new int[2][];//{{},{}}
b[0]=new int[]{4,5};
b[1]=new int[]{1,2,3}; //{{4,5},{1,2,3}}
(3)内存分析
在这里插入图片描述
(4)二维数组遍历
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.println(b[i][j]);
}
}

五、运算符
1.算术运算符
在这里插入图片描述
1.+: 正数,可以拼接字符串,加运算
2./:取的是整数
3.%:取余数
4.++:自加1 ++a先加1再运算 a++ 先运算再加1
5.–:自减1
6.三目运算符 a>b?true:false eg:a>b?a+b:a-b
2.比较运算法
在这里插入图片描述
基本数据类型:全部可以使用,比较值(二进制)
引用数据类型:==以及!=,比较的是地址,是否是同一个对象。

3.位运算符
在这里插入图片描述
&:按位与 两位同时为1才返回1.
|:按位或,只要有一位为1即可返回1
~:按位非,将操作数的每个位(包括符号位)全部取反。
^:按位异或,相同返回0,不同时返回1
负数 取反得到反码 +1变成补码,然后再操作
>>(有符号右移): 8>>2 ======== 8除以2的2次幂=相当于=左操作数除以2的右操作数次幂
<<(左移): 8<<2======== 82的2次幂=相当于=左操作数2的右操作数次幂

15&6
15:0000 1111
6: 0000 0110

&: 0000 0110
|: 0000 1111
^: 0000 1001
6: 0000 0110 原码=反码=补码
~ 1111 1001 补码
1111 1000 反码= 补码-1
1000 0111 原码 -7
-6:1000 0110 原码
1111 1001 反码
1111 1010 补码
~: 0000 0101 ~ 补码=反码=原码

4.逻辑运算符
&&:并且 全真为真,有假为假
短路与,如果左边的表达式为假,右边的表达式就不会再执行
||:或者 有真为真,全假为假
短路或,如果左右的表达式为真,右边的表达式就不会再执行
&:全真为真 无论左边表达式是否为假,右边的表达式都会执行
|:有真为真 无论左边表达式是否为真,右边的表达式都会执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值