With some formatting, your code is:
if ( array[i] < (char)65 || array[i] > (char)122 && array[i] > (char)91 || array[i] <= (char)96 ) System.out.println("False");
Since && has higher precedence than || (see Operators), this is equivalent to:
if ( array[i] < (char)65 || ( array[i] > (char)122 && array[i] > (char)91 ) || array[i] <= (char)96 ) System.out.println("False");
which, since && is short circuiting, is behaviorally equivalent to:
if ( array[i] < (char)65 || array[i] > (char)122 || array[i] <= (char)96 ) System.out.println("False");
which, since the last case covers the first, is logically equivalent to:
if ( array[i] > (char)122 || array[i] <= (char)96 ) System.out.println("False");
You'll print False whenever the value it greater than 122 or less than or equal to 96. 67 is less than 96, so you print False. As pointed out the in comments, there is a precedence to the operators. Rather than learning all the details (to predict cases like this), it's easier just to use enough parentheses.
&&and||operators to interact with each other? Add some bracketing and I suspect you'll be okay...&&has higher precedence. docs.oracle.com/javase/tutorial/java/nutsandbolts/…