Kode berikut:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
kompilasi tanpa kesalahan di JDK 8 (menggunakan -sumber 1.6), tetapi gagal di JDK 6 dengan pesan kesalahan:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Sementara saya mengerti apa kesalahannya, mengapa ini dikompilasi dengan JDK 8? Apakah ini didokumentasikan di mana saja?
Saya kira nilai tidak harus menjadi String. Jika nilai adalah Integer maka saya tidak masuk akal untuk menambahkan string ke dalamnya. Semoga Anda dapat mencoba memberikan nilai ke string
—
fedoraHacker
@fedoraHacker Ekspresi
—
Grodriguez
value = value + suffix
ini sepenuhnya legal terlepas dari jenis nilainya. Jadi menurut saya value += suffix
harus legal juga.
wow, saya tidak tahu. Saya berpikir bahwa seluruh titik objek yang berbeda adalah untuk menetapkan aturan untuk apa data dapat dan tidak bisa dilakukan. Inti dari memiliki tipe data dan objek yang berbeda adalah untuk memisahkan tanggung jawab untuk memastikan tipe melakukan satu hal, tetapi melakukannya dengan baik. Saya hanya bingung bahwa Anda dapat mencampur tipe data seperti itu. Yah Anda belajar sesuatu setiap hari :) dan Value = value + suffix adalah excact sama dengan value + = suffix, jadi saya tidak membantah sintaks sama sekali
—
fedoraHacker
Ya tapi tipe String agak spesial. Operator + di sini adalah "operator penggabungan string"; jika hanya satu operan yang berupa string, yang lain dikonversi menjadi string sebelum ekspresi dievaluasi. Lihat bagian JLS ini .
—
Grodriguez
Ah saya mengerti, tidak tahu string mengubahnya seperti itu. Terima kasih telah meluangkan waktu untuk membalas bahkan setelah pertanyaan telah dijawab!
—
fedoraHacker