文章目录
1、原码、反码、补码
为什么计算机进行运算的时候,用补码的形式进行运算?
因为补码把正数和负数统一起来l
2、运算符
前++:++i 先自增后赋值
后++:i++先赋值后自增
3、&& 和& 使用区别
- &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- & 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
4、|| 和| 使用区别
- ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
- | 逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
- 开发中,我们基本使用||
5、switch_break 注意细节
6、switch 和if 的比较
- 如果判断的具体数值不多,而且符合byte、short 、int、char, enum[枚举], String 这6 种类型。虽然两个语句都可以使用,建议使用swtich 语句。
- 其他情况:对区间判断,对结果为boolean 类型判断,使用if,if 的使用范围更广
7、for编程思想
化繁为简:将复杂的需求,拆分成简单的需求,逐步完成
先死后活:先考虑固定的值,然后再转换成灵活的值
8、数组注意事项
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null - 使用数组的步骤1. 声明数组并开辟空间2 给数组各个元素赋值3 使用数组
- 数组的下标是从0 开始的。
- 数组下标必须在指定范围内使用,否则报:下标越界异常
9、数组赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
int n1 = 2; int n2 = n1; 值拷贝,n2的变化,不影响到n1的值。 - 数组在默认情况下是引用传递,赋的值是地址。
看一个案例,并分析数组赋值的内存图(重点, 难点. )。
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10;
则arr2的值最终会修改arr1;因为都是同一个地址
10、 如何进行数组拷贝
int[] arr1 = {10,20,30}
只需要创建一个新的数组Arr2,开辟新的数据空间
int[] arr2 = new int[arr1.length] ;
//遍历arr1 ,把每个元素拷贝到arr2 对应的元素位置
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
11、二维数组的使用细节和注意事项
- 一维数组的声明方式有:
int[] x 或者int x[] - 二维数组的声明方式有:
int[][] y 或者int[] y[] 或者int y[][] - 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][] 是
一个二维数组
int map [][] = {{1,2},{3,4,5}}
由map[0] 是一个含有两个元素的一维数组,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等的二维数组
12、冒泡排序经典代码
public static void main(String[] args) {
//冒泡排序
//要求从小到大
int[] arr = {20, -1, 89, 2, 890, 7};
int temp = 0; / /辅助交换
for(int i = 0; i < arr. length -1 ; i++) {//外层循环(轮)
for(int j = 0; j < arr.length - 1 - i; j++) {//每轮的比较次数
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
I
//搞定
System.out.println("====排序后====");
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}