java基础知识3

逻辑运算符

&(逻辑与)|(逻辑或)^(逻辑异或)
& 与 && 的区别
1)最终结果是一样的
2)&&具有短路效果,左边是false,右边就不在执行
| 与 || 的区别
1)最终的效果是是一致的;
2)||具有短路效果,左边为true,右边不执行

位运算符

  • &(位与):有0则0
  • |(位或) :有1则1
  • ^(位异或):相同为0,不同为1
  • ~(按位取反)
system.out.println(~6);//6的反码  -7
  00000000 00000000 00000000 00000110     //6的原码、反码、补码都是它本身
  11111111 11111111 11111111 11111001     //对6取反(-7的补码)补码参与的运算,运算的结果是补码
  11111111 11111111 11111111 11111000    //减一 (-7的反码)
  10000000 00000000 00000000 00000111   //取反(-7的原码)

四个位运算符特点: 一个数据对另一个数据位异或两次,该数本身不变;

/*面试题:实现两个整数变量的交换(不使用临时变量)*/
//不需要第三方变量,有弊端,有可能超出int的取值范围
int x=5;
int y=10;
x = x + y;
y = x - y;
x = x - y;
//第二种:不需要第三方变量
x = x ^ y;  // 5 ^ 10
y = x ^ y; //即5 ^ 10 ^ 10 = 5
x = x ^ y; //5 ^ 10 ^ 5 =10
  • << (左移)左边最高位丢弃,右边补齐0,向左移动几位就是乘以2的几次幂
  • >> (右移) 最高位是0,左边补齐0,最高位是1,左边补齐1,向左移动几位就是除以2的几次幂
  • >>> (无符号右移) 无论最高位是0还是1,左边都补齐0
/*面试题:最有效率的算出 2*8的结果*/
System.out.println(2 << 3); //2 * 2^3

三元运算符

(关系表达式)?表达式1 :表达式2

/*1.比较两个整数是否相同*/
int x = 10;
int y = 5;
// boolean b = (x == y) ? true : false;
boolean b = (x == y);
/*2.获取三个整数中id最大值*/
int  x = 10;
int y = 20;
int z = 30;
//先比较任意两个数的值,找出最大值
int temp = (x > y) ? x : y;
//用前两个数的最大值与第三个数比较,获取最大值
int max = (temp > z) ? temp : z;

使用键盘录入数据

1.导包:import java.util.Scanner;
2.创建对象:Scanner sc = new Scanner(System.in);
3.获取数据:int x = nextInt();//录入整数

流程控制语句

  1. 分类
    • 顺序结构
    • 选择结构 :if / switch
    • 循环结构 :for / while /do…while
  2. 选择结构if语句注意事项
  • if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略;
//只有一条语句,没有大括号,则if包含的是离它最近的一条语句
int age = 19;
if(age > 18)
    int x =10;  //此处执行出错,int x =10;包含两个语句,int x声明是一句,x = 10 赋值是一句
                    //所以最好加上大括号
System.out.println("完了")
  • 一般来说,有左大括号就没有分号,有分号就没有左大括号(对for/while同样是这样)
int age = 19;
if(age > 18);{//分号即代表判断结束,所以if并没有包含int x = 10;这条语句
   int  x = 10;
}
  • if语句和三元运算符的相互转换
    • 三元运算符实现的,都可以采用if语句实现,反之不成立;
    • 能用三元运算的尽量用三元运算;
    • 什么时候if语句实现不能用三元进行改进呢?
      • 当if语句控制的操作是一个输出语句的时候就不能;
      • 因为,三元运算符是一个运算符,运算完毕后应该有一个结果,而不是一个输出;
  1. 选择结构switch语句格式
int x = 10;
switch(表达式)  {   // 基本数据类型可以接收byte/short/char/int(能自动提升为int型)   **long类型的不可以**               
    case1//引用数据类型可以接收枚举(JDK1.5) String字符串(JDK1.7)
         语句体1break;
    case2 :
         语句体2break;
       ...
    default :
       语句体n;
       break;
}

  • 选择结构switch语句的注意事项
    • default可以省略吗?可以,但是不建议省略,因为它的作用是对不正确的情况给出提示;
    • break可以省略吗?最后一个可以省略,其他不能省略,否则会出现case穿透现象,建议都不省略;
    • default一定要放在最后吗?不是,可以在任意位置,但是建议在最后;
    • switch语句的结束条件:1)遇到break结束; 2)执行到switch右大括号;
/*case穿透*/
int x = 1;
switch(x){
   case 1:
     System.out.println("1.......");
   //  break;  注释掉出现穿透现象
   case 2 :
      System.out.println("2......");
      break;
}
/*执行结果*/
1......
2.....
/*看程序执行结果*/
int x = 2 ;
int y = 3;
swtich(x) {  //先判断case发现都不满足,则执行default
   default :  //执行完default(y = 4),没有遇到break,则不用判断case,直接往后执行
       y++;    //所以y = 5;又没遇到break,跳过case的判断,往后执行,所以y = 6;
    case 3:   
       y++;
    case 4:
        y++;
}
System.out.println(y);//y = 6;
  1. switch语句和if语句的区别
    • switch建议判断固定值的时候使用
    • if 建议判断区间或范围的时候使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值