您的位置:首页 > 编程语言 > C#

17.2015.08.04第十八节课 C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

2015-08-09 17:18 1406 查看
一.数值类型及其调用原理

名称

说明

所占字节

范围

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两个值

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 */

二.引用类型(数组、对象、string、object)

引用类型的变量又称对象,C#有两个内置的引用类型:object类型和string类型

object是所有类型的父类,可以将任何类型的赋值赋给object类型的变量。

string是字符串类型,字符串对象一旦创建,内容就不可以更改,它是不可变的。



/*以上代码的几点说明

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;

常用和公共的变量或方法一般都设置为静态.

4.存储在堆的非静态变量和方法区的调用,必须要通过实例化对象来调用,否则强制调用会产生错误.

例如

实例化一个对象:Person p=new Person,

Person的变量name的调用: p.name

Person的方法Sayhi的调用: p.Sayhi()

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

++(自增)、- -(自减)的用法

14.2赋值运算符

操作符

运算规则

意义

=

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的值.

14.3关系运算符

==,!=,<,>,<=,>=

14.4逻辑运算符

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 非假=真

14.5优先级

从高到低:一元运算符----二元运算符---关系运算符----逻辑运算符-----赋值运算符

七、String

1、字符串恒定性

1) 字符串我们可以看成是一个字符数组。

2) str.Length表示字符串里面字符的个数。

3) 字符串对象一旦被创建,这个对象就不能被修改。

4) 在创建一个字符串对象的时候,会先去字符串数据池(在堆中)寻找是否有相同的字符串内容的对象,如果有,就直接让变量指向这个对象,如果没有,就创建新的对象。

2、字符串常用方法

1) Compare方法

参数条件

返回值

strA小于strB

负整数

strA等于strB

0

strA大于strB

正整数

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

8)format方法

3StringBuilder

方法一:结果与方法二相同,但这种方法很耗系统资源,建议不要使用.

//string s1 = "aaa";

//s1
+= "bbb";

//s1
+= "cccc";

//s1
+= "dddd";

//Console.WriteLine(s1);

方法二:结果与方法一相同,这种方法最优化,建议使用.

//string
s1 = "aaaa";

//StringBuilder
sb = new StringBuilder();

//sb.Append(s1);

//sb.Append("vvvvvv");

//sb.Append("dddddd");

//Console.WriteLine(sb.ToString());

另外字符常用方法:

字符串变量传值:

//string
s1 = "a";

//string
s2 = "b";

//string
s = string.Format("大家好,小明今年{0}岁,小王今年{1}岁", s1, s2);

将S1的值传递给{0},S2的值传递给{1},整合成一个新的字符串赋值给S

Foreach遍历数组的方法

//string s = "a_b_c_d";

//string[]
aString = s.Split('_');

//foreach
(var a in aString)//遍历

//{

// Console.WriteLine(a);

//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: