运算符、流程控制以及数组
?
局部变量:不是声明在类体括号里面的变量
(1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值
(2)作用范围:定义开始到定义它的代码块结束
(3)同一范围内,不允许2个局部变量命名冲突
?
参数传递时,简单类型进行值转递(参数进行传递时都会先去栈中生成一个副本的,使用结束后释放)
自动类型提升:
byte a = 1;
byte b = 2;
a = a+b; ? ? ? ? ?//编译出错自动类型提升成int
a += b; ? ? ? //自加没有自动类型提升问题
类型自动提升规则:
a和b作某种运算
a和b中有double,结果就是double
a和b中有float,结果就是float
a和b中有long,结果就是long
除此之外,结果都是int
把高字节转成低字节,需要作强制类型转换. byte c=(byte)a+b;
移位运算符:效率最高
>> ? 有符号右移,补符号位
移负数位,则将该数值加32后再进行移位
数值的2进制是按照补码保存的
>>> ?右移后高位都补0
逻辑运算符:
&/|也可以作为逻辑运算符
&&先判断前面一个条件,如果为假,则不用计算后一个条件
||先判断前面一个条件,如果为真,则不用计算后一个条件
" + "运算符:
两个操作的对象是数值时,是加法
如果有一个是字符串时,则是字符串的连接
流程控制语句:
同Core C++
switch中的变量类型只能是byte、 short、int、char四种类型
数组:
声明数组: ??
数组能以下列形式声明:
类型[] array;
类型 array[]; ?
注:
JAVA中推荐用:类型[] array;
一个数组是一个对象
声明一个数组没有创建一个对象
声明时不用指定长度
创建数组:
创建基本数据类型数组:int[] i = new int[2];?
创建引用数据类型数组:Student[] s = new Student[100];?
数组创建后其中的元素有初始值
类型 ? ? ? ? ? ? ? ? ? ? 黙认值?
byte ? ? ? ? ? ? ? ? ? ? 0?
short ? ? ? ? ? ? ? ? ? ?0?
int ? ? ? ? ? ? ? ? ? ? ?0?
long ? ? ? ? ? ? ? ? ? ? 0l?
float ? ? ? ? ? ? ? ? ? ?0.0f?
double ? ? ? ? ? ? ? ? ? 0.0d?
char ? ? ? ? ? ? ? ? ? ? \u0000
boolean ? ? ? ? ? ? ? ?false?
reference types ? ?null
注:
创建时一定要指定长度
int[] i2=new int[]; ? ? ? ? ? //error
初始化数组:?
声明、创建、初始化分开:?
int[] i; ? //定义数组
i = new int[2]; //分配空间
i[0] = 0; ? //初始化
i[1] = 1;?
声明、创建、初始化在同一时间 :
int[] i = {0,1}; ?//显示初始化 ?{}中有几个值,则数组长度为几
Student[] s = {new Student(),new Student()};?
注:int[] i=new int[]{1,2,3}; ? ? //后面[]中不可以写数值
int[] i1=new int[3]{1,2,3}; ? //error
?
二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3];?
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3];//不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][];?
i2[0] = new int[2];
i2[1] = new int[3]; ? ??
数组长度:
数组的属性length
数组长度一旦确定,不可改变 ? ??
int[] i = new int[5]; 则i.length= 5
数组拷贝:
系统类System提供的
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)?
src: 源数组
srcPos: 从源数组哪个位置开始拷贝(位置指的是元素的下标)
dest: 目标数组
destPos: 拷贝的元素放到目标数组的起始位置
length: 拷贝多少个
数组排序:
自己实现一个排序方法来进行排序
或者调用java.util.Arrays.sort(Object o)