Structs are value types that allocate memory on the stack, while classes are reference types that allocate objects on the heap. The 'new' operator is used to instantiate structs and classes, which for structs always initializes fields, while for classes uses parameterless constructors if defined or adds a default one. Equality for structs uses both '==' and 'Equals()' by comparing fields, while for classes '==' compares references and 'Equals()' is implemented by the class.