""" The duration of comparing with "is" should be the same as invoking Object.referenceEquals(). In other words, it should be no more expensive. At least on Novell Mono 1.2.6: Note that comparing interned strings with == is slower than calling Object.referenceEquals(). """ class Test def main is shared Test().run def finish(msg as String, start as DateTime) duration = DateTime.now.subtract(start) print '[duration.totalSeconds:N4] seconds to [msg]' def run n = 20_000_000 s1 = 'aoeu' s2 = 'aoeu' assert s1 is s2 # interned strings should be identical references s2 = 'asdf' start = DateTime.now for i = 0 .. n if s1 == s2 print 'equal' if s1 == s2 # 2 print 'equal' if s1 == s2 print 'equal' if s1 == s2 # 4 print 'equal' if s1 == s2 print 'equal' if s1 == s2 # 6 print 'equal' if s1 == s2 print 'equal' if s1 == s2 # 8 print 'equal' if s1 == s2 print 'equal' if s1 == s2 # 10 print 'equal' .finish('compare interned strings with ==', start) start = DateTime.now for i = 0 .. n if Object.referenceEquals(s1, s2) print 'equal' if Object.referenceEquals(s1, s2) # 2 print 'equal' if Object.referenceEquals(s1, s2) print 'equal' if Object.referenceEquals(s1, s2) # 4 print 'equal' if Object.referenceEquals(s1, s2) print 'equal' if Object.referenceEquals(s1, s2) # 6 print 'equal' if Object.referenceEquals(s1, s2) print 'equal' if Object.referenceEquals(s1, s2) # 8 print 'equal' if Object.referenceEquals(s1, s2) print 'equal' if Object.referenceEquals(s1, s2) # 10 print 'equal' .finish('compare interned strings with Object.referenceEquals', start) start = DateTime.now for i = 0 .. n if s1 is s2 print 'equal' if s1 is s2 # 2 print 'equal' if s1 is s2 print 'equal' if s1 is s2 # 4 print 'equal' if s1 is s2 print 'equal' if s1 is s2 # 6 print 'equal' if s1 is s2 print 'equal' if s1 is s2 # 8 print 'equal' if s1 is s2 print 'equal' if s1 is s2 # 10 print 'equal' .finish('compare interned strings with "is"', start)