2015-10-26 C# 第二次课
一、数值类型的主要包括值类型和引用类型
1.1、值类型及其调用原理:
static void Main(string[] args) { int i = 10; int j = i;//把i的值赋值给j i = 20; Console.WriteLine(j); }
以上代码及图的说明:
/* 数值类型赋值就是值的拷贝////
i的值存储在栈;
int j=I(意思是将i的值拷贝一份给J,同样也是存储在栈);
上面代码输出结果10 */
1.2、值类型:所有数值类型都是值类型(short,int,long,float,double),枚举,布尔类型,结构。
名称 |
说明 |
所占字节 |
范围 |
byte |
字节型 |
1 |
-27~27-1 |
short |
短整型 |
2 |
-215~215-1 |
int |
整型 |
4 |
-231~231-1 |
long |
长整型 |
8 |
-263~263-1 |
char |
字符型 |
1 |
0~65535 |
float |
单精度型 |
4 |
±1.5*10-45~±3.4*1038 |
double |
双精度型 |
8 |
±5.0*10-324~±1.7*10308 |
bool |
布尔型 |
1 |
只有true和false两个值 |
2、引用类型:对象,字符串,object,数组
引用类型的变量又称对象,C#有两个内置的引用类型:object类型和string类型
object是所有类型的父类,可以将任何类型的赋值赋给object类型的变量。
string是字符串类型,字符串对象一旦创建,内容就不可以更改,它是不可变的。
2.1引用类型及其调用原理:
/*以上代码的几点说明 string s1 = "a"; string s2 = s1; s1 = "b"; Console.WriteLine(s2); S2引用类型的值类型赋值如上图所示,输出结果是a */
*/以上图示的几点说明: 1. 定义一个静态变量public static int i = 10; 2.定义一个静态无返回值的方法 public static void Cry() { Console.WriteLine("我爱你"); }
3.以上静态变量和静态方法,不用实例化对象同样可以调用,
例如静态变量i的调用:Person.i
静态变量Cry方法的调用: Person.Cry;
常用和公共的变量或方法一般都设置为静态.
注意:当一个类是一个静态类的时候,类里面的所有成员都是静态的。
总结:1.要去调用一个类里面的非静态的成员(字段、方法),需要通过类的一个对象去调用。
2.要去调用一个类里面的静态的成员,只需要通过类去调用即可。
4.存储在堆的非静态变量和方法区的调用,必须要通过实例化对象来调用,否则强制调用会产生错误.
例如:
实例化一个对象:Person p=new Person,
Person的变量name的调用: p.name
Person的方法Sayhi的调用: p.Sayhi()
注意:1.当实例化一个类的对象的时候,堆里面会将类里面的所有的非静态成员(变量、方法)生成。
2.当去实例化一个类的对象的时候,首先会在堆里面检索该类的对象是否存在,如果存在就会拷贝一份
5.如果已经完成实例化P的基础上,再实例化一个P1,那它的值在堆会整体打包复制一份.
二、装箱、拆箱
装箱:把值类型装换成引用类型
实例:
Int i=10; String s=i.ToString(); Console.WriteLine(s);
拆箱:把引用类型转换成值类型
实例:
String s=”10”; Int i=Convert.ToInt32(s); Console.ReadKey();
注:装箱和拆箱都会耗用系统资源,如处理大量数据的时候会造成系统缓慢.在开发中尽量避免装箱和拆箱. 避免的处理办法可以使用泛型方法.
三、常量和变量
- 常量的定义方法,例如const double pi=3.14
- 成员变量也叫全局变量,写在类的里面(class program),方法的外面(staic void Main(string[]) args)的变量称为全局变量,在本类中任何地方都可调用.
- 局部变量,写在方法的里面的变量称为局部变量.只能在该方法里面调用.
四、数据类型转换
隐式转换:低精度转为高精度,直接转。
int i=123;
Double b=i;
显式转换:高精度转为低精度,必须指明要转换的目标类型,由于数据的差异,有可能丢失部分数据。
Class Program { static void Main() { double x=1223.4; int a; a=(int)x; System.Console.WriteLine(a); } }
注:高精度类型向低精度类型转型,数值会发生改变.例如1223.4变成1223
五、C#中的运算符使用
14.1算术运算符
+(加)、-(减)、*(乘)、/(除)和%(取余数)五个二元运算符和++(自增)、- -(自减)两个一元运算符
Eg:class Program { static void Main(string[] args) { int a = 12345; int b = 234567; int c, d; long e, f; c = a * b / b; d = a / b * b; e = (long)a * b / b; f = (long)a / b * b; Console.WriteLine(c); Console.WriteLine(d); Console.WriteLine(e); Console.WriteLine(f); } }
结果:
-5965
0
12345
0
++(自增)、- -(自减)的用法
六、赋值运算符
操作符 |
运算规则 |
意义 |
= |
a=b |
将b赋值给a |
+= |
a+=b |
a=a+b |
-= |
a-=b |
a=a-b |
/= |
a/=b |
a=a/b |
*= |
a*=b |
a=a*b |
%= |
a%=b |
a=a%b |
?? |
a=b??c |
B为null吗,为null则a=c不为null则a=b |
*赋值运算必须是类型兼容的,即左边的变量必须能够接受右边的表达式的值,否则会产生编译错误。
如果是对象赋值,则称为引用赋值。将右边对象的引用值(地址)赋给左边的变量,这样,两个变量地址相同,即指向同一对象。
问号的两个实例
//int i = 3 > 2 ? 10 : 20;
//Console.WriteLine(i);
以上代码单问号是三目运算,意思是I =3是否大于2,如果成立返回10,反则返回20.
//string s1 = null;
//string s2 = s1 ?? "aa";
//Console.WriteLine(s2);
以上代码双问号是变量为空的判断,S2的返回值,如果S1为空返回aa,反则返回S1的值.
6.1关系运算符
==,!=,<,>,<=,>=
6.2逻辑运算符
A |
B |
!A |
A&B |
A|B |
A^B |
A&&B |
A||B |
False |
false |
true |
false |
false |
false |
false |
false |
False |
true |
true |
false |
true |
true |
false |
true |
True |
false |
false |
false |
true |
true |
false |
true |
True |
true |
false |
true |
true |
false |
true |
true |
|
|
|
|
|
|
|
|
Eg: class Program { public static void Main() { int x = 1; int y = 2; int z = 3; bool u = false; u = !((x >= --y || y++ < z--) && y == z); Console.WriteLine(u);
以上代码说明:
将以上代码分解
- a= x>==--y 即1>=1 返回true; b= y++<z-- 即3<2 返回false;
A1= a || b 即 true || false返回 true ;
2. B1= y==zz 即2=3 返回 false;
3. !(A1 && B1) 即true && false 返回 false !(false)=true 非假=真
6.3优先级
从高到低:一元运算符----二元运算符---关系运算符----逻辑运算符-----赋值运算符
七、String类
1、字符串恒定性
1.1 字符串我们可以看成是一个字符数组。
2.2 str.Length表示字符串里面字符的个数。
2.3字符串对象一旦被创建,这个对象就不能被修改。
2.4在创建一个字符串对象的时候,会先去字符串数据池(在堆中)寻找是否有相同的字符串内容的对象,如果有,就直接让变量指向这个对象,如果没有,就创建新的对象。
2、字符串常用方法
2.1: Compare方法
参数条件 |
返回值 |
strA小于strB |
负整数 |
strA等于strB |
0 |
strA大于strB |
正整数 |
2.2:Equals方法
判断两个字符串是否相同, 如果相同返回值为true,否则为false
实例:
//string s1 = "a"; //string s2 = "b"; //Console.WriteLine(string.Equals(s1, s2)); //Console.WriteLine(s1.Length);
3:定位字符串
StartWith/EndWith |
判断一个字符串是否以一个字符串_开头(结尾),返回值true/false |
indexOf/LastindexOf |
某个指定的字符或字符串第一次(最后一次)出现的位置 |
4:截取字符串
Substring
5:插入和填充字符串
(1)insert方法 string str1 = "hi"; string str2 = "world"; string str3=str1.Insert(1,str2); Console.WriteLine(str3); 结果为:hworldi
(2)PadLeft/PadRigth方法 string str1=”hi”; string str2=str1.PadLeft(4,’@’); Console.WriteLine(str2);
结果为:@@hi
6:删除和剪切字符串
(1)Remove方法
Remove(开始删除的位置,删除的数量)
(2)Trim、TrimStart、TrimEnd方法
Char[] str1={‘@’,’#’,’$’}; string str2=”@China$#”;// string str3=str2.Trim(str1); Console.WriteLine(str3) 结果为China
Trim第一个用法是将字符串的两边空格去掉;
Trim第二个用法是在第二个字符串STR2中去掉包括STR1符号后生成的值.
(3)CopyTo方法
string str1=”China”; char[]str2=new char[100]; str1.CopyTo(0,str2,0,3);//要复制的字符的起始位置,目标数组,指定目标数组中开始存放的位置,要复制的字符个数 Console.WriteLine(str2); 结果为:Chi
7:替换字符串
string str1=”hello”; string str2=str1.Replace(“ll”,”r”); Console.WriteLine(str2); 结果为:hero
作者:逢场作戏
出处:http://www.cnblogs.com/ruanmou
博客园:逢场作戏博客
说明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。