Casting is obviously not an option, so that leaves iterating the source array, casting the element at every iteration and storing it in the destination array of the desired component type.
Unfortunately System.arraycopy() won't help you here and neither will any of the utility methods provided by the java.util.Arrays class, so you'll have to do code the loop-convert-store routine yourself.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.
Not that it matters too much most of the time, but you should always use ++i, not i++, in loops like this, because i++ implies just a tiny bit more work for the computer. ++i means "add one to the variable, and use the result", while i++ means "make a copy of the variable, increment the variable, and use the copy." In a very tight loop, making that copy can make a measurable difference (except when the vm is smart enough to realize the copy isn't needed, and optimizes it away.)