【JavaSE笔记】Java常见细节性问题(一)

来源:互联网 发布:网络招聘怎么写 编辑:程序博客网 时间:2024/06/05 06:08

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:HelloWorlda1System.out.println('a'+1+"HelloWorld");//out:98HelloWorldSystem.out.println("5+5="+5+5);             //out:5+5=55System.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);}}














原创粉丝点击