- 值类型和引用类型
值类型:int double char bool decimal struct enum(继承自system.valueType)
引用类型:string 数组 类 接口 委托
值类型存在内存的栈上,引用类型存储在堆中,栈上的效率高于堆
值传递:把值作为参数传递,把值本身进行传递。ref可以把值传递变为引用传递
引用传递:传递的是引用。
1 private void button1_Click(object sender, EventArgs e) 2 { 3 person p = new person(); 4 p.Name = "张三"; 5 test(p); 6 MessageBox.Show(p.Name); 7 //李四 8 } 9 10 11 12 void test(person s) 13 { 14 s.Name = "李四"; 15 person p2 = new person(); 16 p2.Name = "王五"; 17 s = p2; 18 }
引用传递
2.字符串
重要特性:不可变性,对字符串的操作都会在内存中产生一块新的实例
我们可以将一个字符串看做是 char类型的只读数组。
1 private void button2_Click(object sender, EventArgs e) 2 { 3 string str = "asdfghjk"; 4 MessageBox.Show(str[5].ToString()); 5 }
char
3.等号和Equals,以及重写Equals
对于string类型而言,不管是等号还是Equals比较的都是值本身
//Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会重写
1 private void button3_Click(object sender, EventArgs e) 2 { 3 string s1 = "abc"; 4 string s2 = "abc"; 5 //对于string类型而言,不管是等号还是Equals比较的都是值本身 6 if (s1 == s2) 7 { 8 MessageBox.Show("s1和s2相等"); 9 } 10 else 11 { 12 MessageBox.Show("s1和s2不相等"); 13 } 14 15 if(s1.Equals(s2)) 16 { 17 MessageBox.Show("s1和s2相等"); 18 } 19 else 20 { 21 MessageBox.Show("s1和s2不相等"); 22 } 23 24 //Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会重写 25 person p1=new person(){Name="刘刘"}; 26 //类的命名空间 27 MessageBox.Show(p1.ToString());//_1.值传递.person 28 29 30 person p2 = new person() {Name = "刘刘"}; 31 if (p1 == p2) 32 { 33 MessageBox.Show("p1和p2相等"); 34 } 35 else 36 { 37 MessageBox.Show("p1和p2不相等"); 38 } 39 40 if (p1.Equals(p2)) 41 { 42 MessageBox.Show("p1和p2相等"); 43 } 44 else 45 { 46 MessageBox.Show("p1和p2不相等"); 47 } 48 } 49 50 class person 51 { 52 private string name; 53 54 public string Name 55 { 56 get { return name; } 57 set { name = value; } 58 } 59 60 public override bool Equals(object obj) 61 { 62 person person = obj as person; 63 if(this.Name==person.Name) 64 { 65 return true; 66 } 67 else 68 { 69 return false; 70 } 71 } 72 public override string ToString() 73 { 74 return "重写的ToString()"; 75 } 76 77 }
4.显示程序的运行时间
1 private void button4_Click(object sender, EventArgs e) 2 { 3 //string str = string.Empty; 4 //StringBuilder sb = new StringBuilder(); 5 ////显示运行时间 6 //Stopwatch sp = new Stopwatch(); 7 //sp.Start(); 8 //for(int i=0;i<1000000;i++) 9 //{ 10 // //str += i; 11 // sb.Append(i); 12 //} 13 //sp.Stop(); 14 //MessageBox.Show(sp.Elapsed.ToString()); 15 //StringBuilder sb = new StringBuilder(); 16 //sb.Append("gaojinding"); 17 //sb.Append("wangwu"); 18 //sb.Insert(3, "lisi"); 19 //MessageBox.Show(sb.ToString()); 20 21 }
时间: 2024-10-09 22:29:09