算术运算:
int a1=128;
int b1=33;
int c1=a1>>b1=128/2=64;//右移就是除,移几位就是除几次二。
//左移就是乘。
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位
也就是:a/(2^(b%32)) //除以32是因为int4字节32位。(循环移位,因为整型只有32位)以此类推,可以得到别的类型的计算。
switch(表达式){//表达式只能为byte,short,char(最终还是要转换成int类型),int,enumeration类型,jdk1.8 新增加了String
case constant1:
statement;
break;
case:constant2:
statement;
break;
defult:
statement;
}
标签也要遵循命名规范:
outer:标签
break outer;跳出outer标签循环
System,in(从内存缓冲区读取字符,内存缓冲区的字符是从键盘上读入的(输入a回车:等于向内存缓冲区输入了三个字符:'a','\r','\n' ):键盘缓冲区的数据在程序结束后也会被清除。
图解:
单引号char类型的数据可以和int类型的数据进行比较。
数组:
数组是用来存储一组相同数据类型数据的数据结构。
数组也是一种引用类型。
数组的元素可以是简单类型的数据,也可以是引用类型的数据。
存放数据的容器。在堆区开辟多个空间(在堆区创建多个变量。),逻辑地址连续,物理内存不一定连续,长度固定。
在声明数组时不要写下标,创建对象的时候写下标,通过new操作符来创建数组对象,指定数组的大小,给数组元素的存储分配空间。
数组越界异常:int [] a; a =new int[5]; ArrayIndexOutofBoundsException.
负数组长度异常:int [] a; a=new int[-1]; NegativeArraySizeException.
直接寻址:int a=0;a=3; 直接寻址即直接给出内存单元的物理地址/虚拟地址直接寻址! 变量就是直接寻址
间接寻址:a[4]=5; 间接寻址是建立在直接寻址之上的一种概念,地址不是直接寻址那样直接给出,而是通过某个特定的内存单元得出,第一次是得到某个特定内存单元里的地址数据,第二次在将得出的地址进行DS+偏移地址H的运算直接寻址! 数组中元素就是间接寻址。
三、立即寻址
通过上面的了解,立即寻址就非常简单了,即立即数寻址!
具体三种寻址方式详细解读:https://blog.csdn.net/bjbz_cxy/article/details/80534371
int[]类型代码:
iint[]类型内存图:
String[]类型代码:
String[]类型内存图:
一个变量:stringArray。十个元素。二十一个对象,一个String[]对象,堆里十个String对象,方法区十个对象“two”等。
数组的初始化
初始化:默认初始化和显示初始化
int[]初始化:
int a={1,2,3,4,5,6};(只能初始化)
int[] num; num=new int[]{1,2,3,4,5,6}(推荐使用:既能初始化又可以赋值)
Object[] 类型的数组。可以存放任何类型变量的地址。
数组的拷贝:也就是数组对象地址的拷贝。
数组对象元素的拷贝:
b[2]=a[5];
批量元素的拷贝:system类中有一个方法,arraycopy();
参数
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目的地数据中的起始位置。
length - 要复制的数组元素的数量。
二维数组的内存图
这里面:1个变量(只有一个变量b),四个对象(一个int[][]类型的对象,三个int[]类型的对象),九个元素(int[][]类型对象里面的三个元素,三个int[]对象的六个元素,加起来一共有九个元素);
会挽雕弓如满月,西北望,射天狼。