zoukankan      html  css  js  c++  java
  • 【阶段试题分析】阶段一试题总结

    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);  //结果是True
    Console.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方法。

    来自:http://www.cnblogs.com/chen0720/p/3209398.html  

    关于string讲解: Equals() 和 运算符 == 重载准则

    ===================昏割线==========================

    继承中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>不是同一回事

    关于反射

    反射一个类的对象时不执行这个类的构造函数;不可访问该类中的私有字段(如何获取私有字段?)

  • 相关阅读:
    Java实现各种内部排序算法
    Java实现堆排序(大根堆)
    Java对象的序列化和反序列化
    Java实现链式存储的二叉查找树(递归方法)
    337. House Robber III(包含I和II)
    318. Maximum Product of Word Lengths
    114. Flatten Binary Tree to Linked List
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    96. Unique Binary Search Trees(I 和 II)
  • 原文地址:https://www.cnblogs.com/qingsongwang/p/3266105.html
Copyright © 2011-2022 走看看