1. JVM不是跨平台的,Java语言是跨平台的。
2. 赋值运算符:
a. short s = 1; s = s + 1;
b. short s = 1; s += 1;
上面两个代码有没有问题?如果有,哪里有问题?
a:有问题,隐含了一个默认类型转换,类型不匹配,等号右边最终是 int 型,而等号左边属于 short类型
b:没有问题,+= 扩展的赋值运算符隐藏了强制类型转换。
3. 字符串+任何数据最终的得到的结果都是字符串(+:拼接符号)
public class Demo{
public static void main(String[] args){
System.out.println("HelloWorld"+'a'+1);//out:HelloWorlda1
System.out.println('a'+1+"HelloWorld");//out:98HelloWorld
System.out.println("5+5="+5+5); //out:5+5=55
System.out.println(5+5+"=5+5"); //out:10=5+5
}
}
4. byte b = 130 ;?
有问题吗?如果想赋值正确,那么应该怎么做?结果是?
错误 要强制类型转换:
byte b = (byte) 130 ; //130 默认类型是int;
System.out.println(b);//out:-126
130(D)=0000 0000 0000 0000 0000 0000 1000 0010 (B) (原码)
强制类型转换后: 1000 0010(B)
1 000 0010 (补)
再取补码 1 111 1110 (原)=- (64+32+16+8+4+2)=-126
5.类型转换
byte b1 = 3, b2 = 4 ,b ;
b = b1 + b2 ;
b = 3 + 4 ;
哪句是编译失败的呢?为什么?
b = b1 + b2 是错误的;它隐藏了一个默认转换:
b1 b2都是byte类型(byte short char 之间不转换u一旦参与运行先转换类型int 类型),得到的结过默认转换int类型4个字节的,而用一个byte类型去接受,肯定报错(要解决就必须强制类型转换)
变量相加:先看数据类型,看是否有默认类型转换,有的话,就必须强制类型转化
变量相加:先相加,然后得到结果看其是否在 类型范围内 (byte (-128~127)),在的话就不会报错
6. 逻辑单与& 逻辑双与&&的区别?
a. 逻辑双与&&:具有短路效果:左边为假,则右边不执行。
b. 逻辑双或 || :具有短路效果:左边为真,则右边不执行。
7. 请实现两个数据交换(一般默认int类型)
int a =10 ; int b = 20 ;
a. 方法一:采用中间变量的方法(简单的)
int
c = a;
a = b;
b = c;
b. 方法二:采用用位异或的特点去实现(重点)(位异或的特点:相同为0,不同为1)
a = a ^ b ;
b = a ^ b ; //b = a ^ b ^ b
a = a ^ b ; // a = a ^ b ^ a
c. 方法三:采用变量相加的方式
a = a + b ;
b = a - b ;
a = a - b ;
8. if语句的注意事项:
a. 如果if语句里面只有一条语句,if(表达式) 后面的大括号可以省略,但是建议不要省略
b. if 语句的表达式不管是简单的还是复杂的,最终是 boolean 类型
c. 在if语句里面,有分号的地方不能有 { ,有 { 的地方不能有分号
9. switch 语句相关注意事项;
a. 格式:
switch(表达式){
case 值1:
语句1;
break;
case 值2:
语句2;
break;
……
default:
语句n+1;
break;
}
b. 执行流程:
i. 用switch 后面的表达式的值和case 后面的值进行比较,如果值和1相同,执行语句1
ii. 不等,跟值2 比较,成立执行语句2 遇见break,结束
iii. 如果上述都没有相同的值,执行default中的语句
c. 问题:
i. switch语句后面可以跟byte类型吗?
switch语句后面可以跟long类型吗?
switch语句后面可以跟String类型吗?
解:本身能跟是类型:int,byte,short,char,枚举类型(JDK 5.0以后),String类型(JDK7以后)
ii. switch语句的结束条件是什么?
1) 遇见break结束
2) 程序默认执行到末尾
iii. 其他:
1) case 后面的值只能是常量,不能是变量(JavaScript 脚本语言中switch语句的case可以跟常量,变量,表达式)
2) dafault 里面的break可以省略,但是不建议省略
iv. 注意事项:
1) default在末尾中的break可以省略
2) default可以在该switch语句中的任意位置
3) case后面只能跟常量,不能跟变量
4) 在switch语句中,若中间没有break,会造成一个现象: case穿透
d. 例子:
public class SwitchTest {
public static void main(String[] args) {
//版本1:
int x = 2;
int y = 3;
switch(x){//x的值放入switch中
default:
y++;
break;//1)语句break结束
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
System.out.println("++++++++++");
//版本2:
int a = 2;
int b = 3;
switch(a){
default:
b++; //2)程序默认执行到末尾
case 3:
b++;
case 4:
b++;
}
System.out.println("b="+b);
}
}