Because C #'s string retention mechanism, the following code: [csharp] string theKey1 = "XXXXXX"; string theKey2 = "XXXXXX"; if (object. referenceEquals (theKey1, theKey2) {string theC = theKey1 + theKey2;} string theKey1 = "XXXXXX"; string theKey2 = "XXXXXX"; if (object. referenceEquals (theKey1, theKey2) {string theC = theKey1 + theKey2;} theKey1, theKey2 points to the same address. but the following code: [csharp] int theA = 1; string theKey1 = "XXX" + theA; string theKey2 = "XXX" + theA; if (object. referenceEquals (theKey1, theKey2) {string theC = theKey1 + theKey2;} int theA = 1; string theKey1 = "XXX" + theA; string theKey2 = "XXX" + theA; if (object. referenceEquals (theKey1, theKey2) {string theC = theKey1 + theKey2;} In theKey1, theKey2 references are not equal. note that the string retention mechanism of c # is only applicable to string constants. from the above features, in fact, it is best not to use strings, especially concatenated characters, when locking, it will be ineffective. I originally wanted to use this stitching feature to complete layer locks of different levels, but it was ineffective after tests. other methods are used later.