 So, I've gone ahead and I've created two more students, T and student U, Bob, and I've actually created another one that looks very eerily similar to me. In fact, pretty much is. Well, what if I wanted to see if this student is the same student as this guy? Well, if we think about strings for a second, strings, you might have noticed we couldn't just do this equals equals to. It always freaked out. Now, okay, if I tried it with, say for example, S to T, S to T is okay, relatively speaking because, you know, Adam is not equal to Bob, so I do get a false. But what happens if I try and do the exact same thing with S and U? Again, this Adam and this Adam, everything's the same about them. So, it should be true, right? Wrong. Because we're starting to make more complex data types. So, what we're doing is suddenly we're saying is this memory address the same as this memory address. I'm not looking at the contents yet. This is actually where we overwrite another method that comes from object, and this is actually known as equals. What equals does is, you know, by the generic side of it, if we just think about the object's version of it, it pretty much looks at the object, sees if they're equal to each other. This is what happens when we do the equals equals. But since we're now designing out a complex data type, we have to explicitly state what about these two things is going to be equal? So, public boolean equals, and then I still tell it it's an object, and I say object instead because I have to double check. I have to make sure that what I'm looking at is explicitly what I'm talking about. So, first thing I need to do is, all right, well, is this student the same as this student? I need to probably look to make sure that they are the same, you know, whatever this object is, this object out, I should probably see if it is an instance of, notice how it changes student, student, student. Because now, this is going to tell me if it's true or false or not. If it's not, else, return false, because it doesn't matter. It's not a student, so I clearly know that it doesn't, it's not correct. But if it is a student, again, that means that it's going to have an ID, it's going to have a balance, it's going to have courses, it's going to have a name and address phone email. Well, again, if we think about it, the student ID is that unique identifier for all Cape Fear Community College people. So, if this is a student, then what I have to do is I can say, well, return this dot ID, dot, now I'll even kind of clean this up a little bit, so string, how do I want to build this up? Well, first I'll go ahead and make a student, student, new student, because right now it's an object. Again, if you need, we're going to need to do explicit casting on my object to make sure that it is the same thing. And so now that I have this sort of a build up, let's see, one of the things I'm going to also need to do is I'm going to need to write a getter, because, again, these are private, so I need to have some way of accessing some other object's version. So I'm going to public string, get ID, return this dot ID. Now what I can do is I can say, does this dot ID my string dot equals new student dot get ID. Again, what am I doing here? Now, just so we can think about that, ID, ID is this guy. It's no different than me doing any other string, name dot equals, get name, ID, this dot ID equals, does it equal the student? This student I just created, I explicitly casted, give me his ID, give me his ID. And if it is, cool. So now all of a sudden, again, I still can't do this, I still can't do equals equals, that's not going to work, still get false. But what I can do is I can say, dot equals u, does s, does student s equal student u? And since they have the same ID, this is going to be true again, because they have the same ID.