Problem
Sometimes you want to know object, rather than value, equality. This would require exposing a non-overridable shared method of Object, ObjectEquals().
Proposed Solution
Expose Object.ObjectEquals() As Boolean as well as String.IsInterned() As Boolean
Note that ObjectEquals() cannot be overridden. This ensures that it always returns reference equality for any type of instance, since equality operators can be overridden. This implies you would have to allow a method signature to be Sealed, or at least be able to enforce that as a special case here.
(As a side note, in C# you would just drop the virtual keyword. If you don't use virtual or abstract, the method can't be overridden. You can also make it "virtual sealed". Since all Objo methods are effectively "virtual", you would have to add Sealed if you wanted devs to be able to selectively prevent overriding. It also implies you would consider allowing an entire class to be declared sealed. IMO this is a lower priority can of worms. I haven't needed it in practice as a line of business dev. Although a developer of 3rd party libs would likely feel differently).
Example Workflow
One use of this is actually a performance hack for strings: If you know two strings you're comparing are interned, you can just check reference equality, which is much faster than value equality, particularly for longer strings.
https://learn.microsoft.com/en-us/dotnet/api/system.object.referenceequals?view=net-10.0
This is why I suggested an IsInterned() method, although, personally I know when I'm interning or not and when it's safe to use ReferenceEquals(). Here again it would be more an option for someone writing an API where the provenance of strings passed to it are not known.
Alternatives Considered
Who Would This Help?
I'm sure there are other use cases where ObjectEquals would be helpful, like creating and dealing with singletons.