package practicejava;
public class Query {
public static void main(String[] args) {
char ch = 66;
System.out.println("character= " + ch);
ch++;
System.out.println("character = " + ch);
}
}
从技术上讲ch++;
和ch=ch+1;
是相同的,但是为什么我写ch=ch+1;
而不是ch++;
时却出错了?
答案 0 :(得分:6)
您需要提供演员表才能做到这一点:
<?php
$orderby=$_REQUEST['orderby'];
if(strpos($orderby,'d')===true){
echo "exists";
}else{
echo "not ";
}?>
这是因为表达式ch = (char) (ch + 1);
被提升( upcast )为ch + 1
。为了让您将该表达式重新分配给int
,您需要明确地 downcast 。
答案 1 :(得分:5)
通过ch+1
,char ch
将首先升级为int
,就像((int)ch) + 1
一样,因此结果将是int
。
当您尝试将int
(32位)分配回char
(16位)时,它可能会失去准确性,您需要明确进行ch = (char)(ch + 1);
二进制数值提升是对某些操作数执行的 运算符:
...
数字类型+和-(§15.18.2)的加减运算符
它将执行
使用野生原始转换(第5.1.2节)来转换或 以下规则指定的两个操作数:
如果一个操作数的类型为double,则另一个将转换为double。
否则,如果其中一个操作数为float类型,则另一个将被转换 漂浮。
否则,如果其中一个操作数的类型为long,则另一个将被转换 长。
否则,两个操作数都将转换为int类型。
答案 2 :(得分:3)
首先,请注意char
的大小为2个字节(16位),而int
的大小为32位。
1。键入ch++
时:
要应用++
运算符,没有类型转换,但该运算符只是使该char
的位表示自身加1。请参阅 JLS11第15.14.2章,第575页:
后缀增量表达式的类型是变量的类型。
2。键入ch=ch+1
时:
ch
首先转换为int
,然后由1
添加(仍然是一个int),而=
实际上正在转换为{{1 }}具有32位,而int
仅具有char
位,请注意,这可能会失去准确性。因此,如果没有显式强制转换,编译器将对此抱怨,这就是错误的原因。