JAVA基础--学习笔记03

基本类型转化

取值范围小的数据类型与取值范围大的数据类型进行运算,会先把小的数据类型转化成大的数据类型再运算。

byte, short, char 类型混合运算时都会转成int类型。

有隐式转化和显式转化之分

字符

在ASCII编码种,一个英文字符需要1个字节
在GB2312编码或者GBK编码中,一个汉字字符需要2个字节
UTF-8编码,汉子需要3-4个字节

使用char来定义字符类型,可以直接用ascii表的数字来赋值,也可以计算两个字符之间的距离。

char c = 'a';
char c = 97;

char在ascii编码中占一个字节,取值 0-127
char在unicode编码中占两个字节,取值 0-65535

重点:java语言采用unicode编码,所以可以一个char表示一个中文汉字

面试题:

看下面代码是否有问题?

short s = 1; s = s + 1;

short s = 1; s += 1;

对于第一行是错的,s = s + 1; 会令s 强制转化成int型变量。short与int进行运算,会把short转成int,两个int相加返回int。
对于第二行,+=会自动转化,相当于添加了强制转化符。

逻辑运算符

&: 逻辑与,有false则false
|: 逻辑或,有true则true
^: 逻辑异或,相同为false,相异为true
!: 逻辑非,true和false对换
&&:短路,两者都true为true
||:短路,只要有true则true

面试题:&&& 的区别

&& 可以逻辑短路,也就说当前面为false时,后面则不进行操作了。
& 则不论前面true 或者 false,都会操作后一步。

测验: 如下代码分别输出什么?

public void test2() {
        int a = 9, b = 10;
        if(++a == 10)
            System.out.println("a先自增再比较大小");
        if(++a == 11 && b++ == 10)
            System.out.println("b先和10比较大小,再自增");
        if(!(++a == 11 && ++b == 11))
            System.out.println("b : " + b + ";表明++b没被执行");

        System.out.println("a: " + a);
        System.out.println("b: " + b);

    }

答案输出如下:

a先自增再比较大小
b先和10比较大小,再自增
b : 11;表明++b没被执行
a: 12
b: 11

通过上述例子可以很好了解 ++ 区别;以及 && 造成短路现象。

位运算符的基本用法

^ 按位异或 相同则0,不同则1
例如:

0000 0001
0000 0100

按位异或后的结果为
0000 0101

一个数异或同一个数两次后,会变回原来的值。

<< 按位左移 左移,右边补0,最高位不变

>> 按位右移动 右移,左边补0,最高位不变

>>> 无符号右移

面试题:

实现两个整数变量的交换(不使用额外空间开销)

^ 的特点就是:一个数对另一个数异或两次,该数本身不变。

int a = 2, b = 5;

        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

仔细观察发现,b本质上 = a ^ b ^ b = a,同理a。

Scanner类键盘录入

Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();

Switch 语句

    Scanner sc = new Scanner(System.in);
    int x = sc.nextInt();
    switch (x) {
        case 1:
            System.out.println("1");
            break;
        case 2:
            System.out.println("2");
            break;
        default:
            break;
    }

switch 语句中的变量类型可以是:byte,short,int或者char。从Java SE7之后,支持String类型。同时case标签必须为字符串常量或字面量。

switch 语句可以拥有多个case语句,每个case语句后面跟一个要比较的值和冒号。

当变量的值与case语句的值相等时,执行case语句之后的内容,直到break。

switch 语句可以包含一个default分支,该分支必须是switch语句的最后一个分支。在没有case语句的值与之相匹配的时候或者case中没有break的时候执行default,default语句不需要break语句。

面试题:
long 不可以作为switch表达式
short可以作为switch表达式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值