String类型对象比较
注意是值的比较还是引用地址的比较
“==”比较两个对象是否为同一个对象
Equals则是对其对象的值进行比较
String s1 = "123";String s2 = "123";Console.WriteLine(s1 == s2);Console.WriteLine(s1.Equals(s2)); char[] ch = new char[3] { '1', '2', '3' };String s3 = new String(ch);object obj1 = s1; //获取地址object obj3 = s3; Console.WriteLine(obj1 == obj3); //结果是TrueConsole.WriteLine(obj1.Equals(obj1)); //结果是False
===================昏割线,以下内容转自于博客园====================
Person p1 = new Person("aa", 12); Person p2 = new Person("aa", 12); Console.WriteLine("Equals和= =(等于号)的比较"); Console.WriteLine("p1==p2 " + (p1 == p2));//fals Console.WriteLine("p1.Equals(p2) " + p1.Equals(p2));
对于 p1==p2 比较的结果是false,这点是毫无疑问的,因为他俩是两个不同的变量,所以引用的地址也是不同的。但是对于p1.Equals(p2) 返回false,可能有人会产生疑问,p1 和p2的内
容是相同的啊,为什么他俩的比较结果却是为false呢?。原因就在于在Equals是Object中的一个虚方法,而person类中没有对她进行重写,因此此时调用的仍是父类中的Equals方法。但是父
类是无法知道你都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals方法。
来自:
关于string讲解:
===================昏割线==========================
继承中override和new问题
先贴上阶段一的考试题:
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace NO8{ public class Animal { protected int i; public Animal() { Add(1); } public int GetI() { return i; } public virtual void Add(int v) { i += v; } } public class Dog : Animal { public Dog() { Add(2); } public override void Add(int v) { i += v * 2; } } public class Program { static void Main(string[] args) { Dog dog = new Dog(); dog.Add(5); Console.WriteLine(dog.GetI()); Console.Read(); } }}
问题:运行结果是多少?答案:16
考点:涉及到override的使用,以及实例化子类对象时需要调用父类的构造函数当父类的中的virtual方法被子类重写了,那么当实例化子类对象时需要调用父类的构造函数,其中构造函数中Add方法则是子类中重写过的;
当virtual方法没有被重写时,子类中的方法Add被new修饰时,父类中构造方法调用的则是本类中的virtual修饰的Add方法。异常捕获的顺序
从子类到基类的顺序
对于List集合作为参数使用
List<object>与List<food>不是同一回事
关于反射
反射一个类的对象时不执行这个类的构造函数;不可访问该类中的私有字段(如何获取私有字段?)