Referensi Java selalu menunjuk ke suatu objek. Objek memiliki header yang antara lain mengidentifikasi jenis beton (sehingga gips dapat gagalClassCastException
). Untuk array, awal objek juga termasuk panjang, data kemudian mengikuti segera setelah dalam memori (secara teknis implementasi bebas untuk melakukan apa yang diinginkan, tetapi akan sangat bodoh untuk melakukan hal lain). Jadi, Anda tidak bisa; t memiliki referensi yang menunjuk suatu tempat ke dalam array.
Dalam C pointer arahkan ke mana saja dan ke apa saja, dan Anda bisa menunjuk ke tengah array. Tetapi Anda tidak dapat dengan aman membuang atau mencari tahu berapa lama array itu. Dalam D pointer berisi offset ke blok memori dan panjang (atau setara dengan pointer ke ujung, saya tidak ingat apa implementasi sebenarnya). Ini memungkinkan D untuk mengiris array. Dalam C ++ Anda akan memiliki dua iterator yang menunjuk ke awal dan akhir, tetapi C ++ agak aneh seperti itu.
Jadi kembali ke Jawa, tidak, kamu tidak bisa. Seperti yang disebutkan, NIO ByteBuffer
memungkinkan Anda untuk membungkus array dan kemudian mengirisnya, tetapi memberikan antarmuka yang canggung. Tentu saja Anda bisa menyalin, yang mungkin jauh lebih cepat daripada yang Anda bayangkan. Anda dapat memperkenalkan String
abstraksi Anda sendiri- seperti yang memungkinkan Anda untuk mengiris array (implementasi Sun saat ini String
memiliki char[]
referensi plus offset dan panjang mulai, implementasi kinerja yang lebih tinggi hanya memiliki char[]
). byte[]
tingkat rendah, tetapi abstraksi berbasis kelas apa pun yang Anda pakai yang akan membuat berantakan sintaks yang mengerikan, sampai JDK7 (mungkin).