GetClass() vs StaticClass()

Please allow me to put my test code and the console output as below

void ASampleCodingPractise::GetClassVsStaticClass()
{
	UTestUObject* TestUObject = NewObject<UTestUObject>(this,TEXT("TestUObject"));
	UClass* TestUObjectClass = TestUObject->GetClass();
	UClass* TestUObjectStaticClass = UTestUObject::StaticClass();
	UClass* TestUObjectStaticClassTakenFromGetClass = TestUObject->GetClass()->StaticClass();
	UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass(): %s"), *TestUObject->GetClass()->GetName());
	UE_LOG(LogCodePractise, Log, TEXT("UTestUObject::StaticClass(): %s"), *UTestUObject::StaticClass()->GetName());
	UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass()->StaticClass(): %s"), *TestUObject->GetClass()->StaticClass()->GetName());


	bool Test1 = false;
	if (TestUObject->IsA(TestUObject->GetClass()))
	{
		Test1 = true;
	}
	UE_LOG(LogCodePractise, Log, TEXT("TestUObject->IsA(TestUObject->GetClass() result is: %s"), Test1?TEXT("True") : TEXT("False"));


	bool Test2 = false;
	if (TestUObject->IsA(UTestUObject::StaticClass()))
	{
		Test2 = true;
	}
	UE_LOG(LogCodePractise, Log, TEXT("TestUObject->IsA(UTestUObject::StaticClass()) result is: %s"), Test2 ? TEXT("True") : TEXT("False"));

	bool Test3 = false;
	if (TestUObject->IsA(TestUObject->GetClass()->StaticClass()))
	{
		Test3 = true;
	}
	UE_LOG(LogCodePractise, Log, TEXT("TestUObject->GetClass()->StaticClass()) result is: %s"), Test3 ? TEXT("True") : TEXT("False"));

}

Output:
LogCodePractise: TestUObject->GetClass(): TestUObject
LogCodePractise: UTestUObject::StaticClass(): TestUObject
LogCodePractise: TestUObject->GetClass()->StaticClass(): Class

LogCodePractise: TestUObject->IsA(TestUObject->GetClass() result is: True
LogCodePractise: TestUObject->IsA(UTestUObject::StaticClass()) result is: True
LogCodePractise: TestUObject->GetClass()->StaticClass()) result is: False