一、装箱和拆箱
装箱是将值类型转换为引用类型
eg:
Int a=5;
Object o=a;
拆箱是将引用类型转换为值类型
eg:
Int a=5;
Object o=a;
Int b=(int)o;
利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来
二、运算符和表达式
类别 | 运算符 | 说明 | 表达式 |
算术运算符 | + | 执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾) | 操作数1 + 操作数2 |
- | 执行减法运算 | 操作数1 - 操作数2 | |
* | 执行乘法运算 | 操作数1 * 操作数2 | |
/ | 执行除法运算 | 操作数1 / 操作数2 | |
% | 获得进行除法运算后的余数 | 操作数1 % 操作数2 | |
++ | 将操作数加 1 | 操作数++ 或++操作数 | |
-- | 将操作数减 1 | 操作数-- 或--操作数 | |
~ | 将一个数按位取反 | ~操作数 |
运算符 | 计算方法 | 表达式 | 求值 | 结果(假定 X = 10) |
+= | 运算结果 = 操作数1 + 操作数2 | X += 5 | X = X + 5 | 15 |
-= | 运算结果 = 操作数1 - 操作数2 | X -= 5 | X = X - 5 | 5 |
*= | 运算结果 = 操作数1 * 操作数2 | X *= 5 | X = X * 5 | 50 |
/= | 运算结果 = 操作数1 / 操作数2 | X /= 5 | X = X / 5 | 2 |
%= | 运算结果 = 操作数1 % 操作数2 | X %= 5 | X = X % 5 | 0 |
优先级(1 最高) | 说明 | 运算符 | 结合性 |
1 | 括号 | ( ) | 从左到右 |
2 | 自加/自减运算符 | ++/-- | 从右到左 |
3 | 乘法运算符 除法运算符 取模运算符 | * / % | 从左到右 |
4 | 加法运算符 减法运算符 | + - | 从左到右 |
5 | 小于 小于等于 大于 大于等于 | < <= > >= | 从左到右 |
6 | 等于 不等于 | = != | 从左到右 从左到右 |
7 | 逻辑与 | && | 从左到右 |
8 | 逻辑或 | || | 从左到右 |
9 | 赋值运算符和快捷运算符 | = += *= /= %= -= | 从右到左 |
自加自减
表达式 | 类型 | 计算方法 | 结果(假定 num1 的值为 5) |
num2 = ++num1; | 前置自加 | num1 = num1 + 1; num2 = num1; | num2 = 6; num1 = 6; |
num2 = num1++; | 后置自加 | num2 = num1; num1 = num1 + 1; | num2 = 5; num1 = 6; |
num2 = --num1; | 前置自减 | num1 = num1 - 1; num2 = num1; | num2 = 4; Num1 = 4; |
num2 = num1--; | 后置自减 | num2 = num1; num1 = num1 - 1; | num2 = 5; Num1 = 4; |
转义字符:
转义序列 | 字符 |
\’ | 单引号 |
\” | 双引号 |
\\ | 反斜杠 |
\0 | 空 |
\a | 警告 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
二、选择结构
1.
If(条件)
{
<语句块>
}
Else
{
<语句块>
}
2.
Switch(选择变量)
{
Case 值1:
...
Break;
Case 值2:
...
Break;
......
Case 值n:
......
Break;
Default:
......
}
Switch....case 语句其他特征:
- 各个case标签不必连续,也不必按特定顺序排列
- Default 标签可位于switch...case结构中的任意位置
- Default标签不是必选的,但使用default标签是一个良好的编程习惯
- 每两个case标签之间的语句数不限
四、循环结构
循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真
(一)循环结构的类型
While循环
While循环反复执行指定的语句,直到制定的条件为假
While(条件)
{
//语句
}
Break语句可以用于退出循环
Continue 语句可以用于跳过当前循环并开始下一循环
Do....while循环
Do....while循环与while循环相似,两者的区别在于:Do....while循环中即使条件为假时也至少执行一次循环体中的语句
Do
{
//语句
}
While(条件)
for循环
for循环要求只有在对特定条件进行判断之后才允许执行循环
这种循环用于将某个语句或语句块重复执行预定次数的情形
For
{
//语句
}
foreach循环
foreach循环用于遍历整个集合或数组
Foreach(数据类型 元素(变量) in 集合或数组)
{
//语句
}
五、数组
数组是同一数据类型的一组值
数组属于引用类型,因此存储在堆内存中
数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行
1.不赋值
Int []a=new int[5];
2.声明并赋值
Int []a=new int[5]{0,9,8,7,6};
Int []a=new int[ ]{0,9,8,7,6};
Int []a={0,9,8,7,6};
注意:数组的初始值的数目必须和数组的一样
六、冒泡排序
口诀:
n个数字来排序
两两相比小靠前
外层循环n-1
内层循环n-1-i
For(int i=0;i<n-1;i++)
{
For(int j=0;j<n-1-i;j++)
{
//比较j和j+1位置的元素,如果前大后小就交换
}
}
七、枚举
枚举是一组已命名的数值常量
用于定义具有一组特定值的数据类型
枚举以关键字enum声明
默认情况下,将0值赋给枚举的第一个元素,然后对每个后续的枚举元素按1递增
在初始化中可以重写默认值
Public enum weekdays
{
Monday=1,
Tuesday=2,
Wednesday=3,
Thursday=4,
Friday=5
}
C# 中的结构可以在其内部定义方法并可包括构造函数,但不能无参