System.out.println("z="+z);
System.out.println("c="+c);
}
}
4.逻辑运算符
publicclassLogicalTest{
publicstaticvoidmain(Stringargs[]){
booleana=true;
booleanb=false;
booleanc;
c=a&b;System.out.println(c);
c=a|b;System.out.println(c);
c=a^b;System.out.println(c);
c=a^c;System.out.println(c);
c=!
a;System.out.println(c);
c=a&&b;System.out.println(c);
c=a||b;System.out.println(c);
}
}
5.条件运算符
1 条件运算符是java语言中唯一的三元运算符
2 语法格式:
条件?
op1:
op2
3 若条件为真,则计算op1的值,否则计算op2的值
例:
z=a>0?
a:
-a;(求绝对值)
z=a>b?
a:
b;(求最大值)
6.位运算符
v位运算符包括:
~(取反)&(按位与)
|(按位或)^(按位异或)
v位运算符功能说明:
7.移位运算符
◆<<:
左移运算符,将左操作数向左移动,移位个数由右操作数决定。
移动之后,移出的空位补0;
◆>>:
右移运算符(有符号的右移运算),将左操作数向右移动,移位个数由右操作数决定。
它使用“符号扩展”方式进行补空,即:
用符号位填充左侧的位(若值为正,则补0;若值为负,则补1)。
◆>>>:
无符号移位运算符,它使用“零扩展”方式进行补空,即:
用0填充前面的空位。
注意:
对移位运算符右侧的参数需要进行模32的操作例如:
1<<35等价与1<<3
publicclassBitTest{
publicstaticvoidmain(String[]args){
inti=10;
intj=i<<2;
System.out.println("j="+j);
j=j>>1;
System.out.println("j="+j);
intk=(i&8)/8;
System.out.println("k="+k);
k=(i&(1<<3))>>3;
System.out.println("k="+k);
}
}
//负数右移运算测试示例:
packagepk.aa;
publicclassTestMoveBit{
publicstaticvoidmain(String[]args){
intx=-5;
/**“>>”为有符号的右移,它是以原码方式参加向右移位。
*负号位的1不参与移位;在移位中当移出去的是数字1时,
*则最后结果应加1;当移出去的是数字0,则最后结果不加1
*/
inty=x>>1;
/**“>>>”为无符号的右移,它是以补码方式参加向右移位。
*左边移出的空位被0;不论右边移出去的是0还是1,则最后结果
*均不加1。
*/
intz=(x>>>1);
System.out.println("x="+x+"y="+y+"z="+z);
ints=0;
for(inti=2;i<=30;i++){
s+=(int)(Math.pow(2,i));
}
s=s+1;
System.out.println("s="+s);
booleanb1=s==z;
System.out.println("s==z"+(b1?
"相等":
"不相等"));
}
}
分析结果:
/**
*intx=-5;
*inty=x>>1;
*
*原码:
10000000000000000000000000000101
*右移1位后:
1X000000000000000000000000000010
*+1
*-------------------------------------------------------------------------------------
*1X000000000000000000000000000011
*结果为:
-3
*
*intx=-5;
*inty=x>>>1;
*
*原码:
10000000000000000000000000000101
*反码:
11111111111111111111111111111010
*补码:
11111111111111111111111111111011//说明:
补码即为无符号数,即是正数
*右移1位后:
X1111111111111111111111111111101
*空位补0后:
01111111111111111111111111111101
*-------------------------------------------------------------------------------------
*空位补0后:
01111111111111111111111111111101
*结果为:
*
*/
8.赋值运算符
1 赋值运算符“=”是最常用的一种运算符。
它将等号右边的表达式的值赋给左边的变量。
2 可以在赋值语句中采用简化的格式书写二元运算符,x+=4;等价与x=x+4;
3 Java中“扩展”的赋值运算符:
+=,-=,*=,/=,%=,^=,&=,|=,>>=,<<=,>>>=
4 当“=”两侧的数据不一致时,需要用到类型转换,有两种方式。
Ø自动类型转换:
系统自动完成
Ø强制类型转换:
手工完成
9.自动类型转换
1 自动类型转换:
容量小的数据类型可以自动转换为容量大的数据类型。
在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。
2 特例:
可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
●shortb=12;//合法
●shortb=1234567;//非法
3 多种类型的数据混合运算时,不同的数据类型之间是无法运算,当一个表达式中出现不同的数据类型时,在运算前,编译器会将操作数转换为相同的类型
Ø只要两个操纵数中有一个是double类型,会将另一个转换成double类型
Ø否则,只要两个操纵数中有一个是float类型的,另一个会转化float类型
Ø否则,只要两个操纵数中有一个是long类型的,另一个将转化成long类型
Ø否则,两个操作数都将转换成int类型
publicclassImplicitCastTest{
publicstaticvoidmain(String[]args){
byteb=1;//如果b=128;?
shorts=b;//byteimplicittoshort
inti=b;//byteimplicittoint
floatf=b;//byteimplicittofloat
longl=b;//byteimplicittolong
doubled=b;//byteimplicittodouble
charc=‘a’;
i=c;//charimplicittoint
System.out.println(i);//会输出什么呢?
f=i;//intimplicittofloat
l=i;//intimplicittolong
d=i;//intimplicittodouble
f=l;//longimplicittofloat
d=l;//longimplicittodouble
d=f;//floatimplicittodouble
}
}
10.强制类型转换
1 强制类型转换(Cast):
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
2 强制类型转换的语法格式:
“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型。
例如:
doublex=3.14;
intnx=(int)x;//值为3
3 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
例如:
intx=300;
bytebx=(byte)x;//值为44
4 不能在布尔类型和任何数值类型之间做强制类型转换。
如果需要把布尔类型转换成一个数字应该按如下方法:
booleanb=true;
b?
1:
0;
classCastingTest{
publicstaticvoidmain(Stringargs[]){
inta=257;
byteb=(byte)a;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
/*结果:
*25700000000000000000000000100000001
*100000001
*/
11.表达式
1 表达式是符合一定语法规则的运算符和操作数组成的序列,其目的是用来说明一个计算过程。
2 表达式的类型和值
●对表达式中操作数进行运算得到的结果称为表达式的值。
●表达式的值的数据类型即为表达式的类型。
3 表达式的运算顺序
同其它程序设计语言一样,使用圆括号来指示运算的执行顺序,在不使用圆括号的情况下:
●应按照运算符的优先级从高到低的顺序进行。
●优先级相同的运算符按照事先约定的结合方向进行。
12.语句
1 表达式语句:
表达式+分号“;”如:
x=25;C=a+b;
2 空语句:
只有分号如:
i=5;;;
3 符合语法规则
4 以分号作为语句的结束,一个语句可以跨多行
13.字符串
1 Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。
2 Stringstr=“中国”;表示str引用了对象”中国”str称为对象变量,“中国”称为对象!
!
3 一个实例就是一个对象!
!
4 每个用双引号括起来的字符串都是一个String类的一个实例。
5 当“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行运算。
6 字符串中的第一个字符的位置为0.
String类中的方法:
s.substring(a,b)总是有b-a个字符,不包括b。
●CharcharAt(intindex)返回字符串中的index个字符
●booleanequals(Stringother)如果字符串与other相等,则返回true
●booleanequalsIgnoreCase(Stringother)如果字符串与other相等(忽略大小写)则返回true
●intindexOf(Stringstr)查找字符串
●intindexOf(Stringstr,ints)返回与str匹配的第一个字串的开始位置,该位置从0或s开始记
●Intlength()返回字符串的长度
●Stringreplace(charoldChar,charnewChar)用一个新的字符代替一个旧的字符
●BooleanstarsWith(Strings)如果字符串以s开始,则返回true
●BooleanendsWith(Strings)如果字符串以s结尾,则返回true
●StringtoLowerCase()把原始字符串中的所有大写字母改成小写字母
●StringtoUPPerCase()把原始字符串中的所有小写字母改成大写字母
●Stringtrim()去掉字符串前后空格
等号(==