Java başvuruları her zaman bir nesneyi gösterir. Nesnenin, diğer şeylerin yanı sıra beton tipini tanımladığı bir başlığı vardır (böylece dökümler başarısız olabilirClassCastException
). Diziler için, nesnenin başlangıcı da uzunluğu içerir, daha sonra veriler bellekte hemen sonra gelir (teknik olarak bir uygulama, istediği şeyi yapmakta özgürdür, ancak başka bir şey yapmak zor olacaktır). Yani, t bir yerde bir dizi işaret eden bir referans var.
C işaretçileri herhangi bir yeri ve her şeyi gösterir ve bir dizinin ortasını gösterebilirsiniz. Ancak dizinin ne kadar sürdüğünü güvenli bir şekilde yayınlayamaz veya bulamazsınız. D işaretçi bellek bloğu ve uzunluğu bir ofset içerir (veya eşdeğer sonuna bir işaretçi, ben uygulamanın gerçekte ne yaptığını hatırlayamıyorum). Bu, D'nin dizileri dilimlemesine izin verir. C ++ 'da başlangıç ve bitiş gösteren iki yineleyiciniz olacaktır, ancak C ++ bunun gibi biraz tuhaftır.
Java'ya dönersek, hayır. Belirtildiği gibi, NIO ByteBuffer
bir diziyi sarmanıza ve sonra dilimlemenize izin verir, ancak garip bir arayüz sağlar. Elbette kopyalayabiliyorsunuz, ki bu muhtemelen düşündüğünüzden çok daha hızlı. String
Bir diziyi dilimlemenize izin veren kendi benzeri soyutlamalarınızı tanıtabilirsiniz (mevcut Sun uygulamasının String
bir char[]
referansı artı bir başlangıç ofseti ve uzunluğu vardır, daha yüksek performans uygulaması sadece char[]
). byte[]
düşük seviyededir, ancak JDK7'ye (belki de) kadar sözdiziminde kötü bir karışıklık yaratacaktır.