Java基础笔记(1)数据类型、类型转换、运算符

一、数据类型

1.基本数据类型(4类8种)

基本数据类型(4类8种)
整数型 占用字节数(byte) 默认值  取值范围
byte 1 0 -128~127
short 2 0 -32768~32767
int(默认 4 0 -2^31~2^31-1
long  8 0 -2^63~2^63-1
浮点型      
float  4 0.0 1.4e-45~3.4028235e+38
double(默认 8 0.0

4.9E-324~

1.7976931348623157E308

字符型      
char 2 \u0000  
布尔型      
boolean 理论1bit,实际4byte(作为数组中的元素则1byte)  false  

    注:定义长整型long加L或l,单精度float加F或f。
2.引用数据类型:类、接口和数组
3.补充:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
    可以。因为java语言中的字符占用两个字节;Java语言采用的是Unicode编码。

二、类型转换

1.boolean类型不参与转换
2.默认转换
    1)从小到大
    2)byte ——> short(char) ——> int ——> long ——> float ——> double
    3)byte/short和char之间不相互转换,在运算时直接转换成int参与运算
3.强制转换
    1)从大到小
    2)可能有精度损失,不推荐
    3)格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);
4.注意点:
    1)下面两种方式的区别
        float f1 = 12.345f;//直接将float类型的常量赋给f1
        float f2 = (float)12.345;//将double类型的常量强制转换成float类型,再赋给f2
    2)下面的程序有问题吗,如果有,在哪里呢?
        byte b1 = 3;//判断int常量3在byte范围内,成功赋值
        byte b2 = 4;//判断int常量4在byte范围内,成功赋值
        byte b3 = b1 + b2;//变量b1和b2在运算时会转换成int,int的值无法赋给byte变量b3,编译错误
        byte b4 = 3 + 4;//计算int常量3和4的结果得int常量7,判断其在byte范围内,成功赋值
    3)运行结果:
        byte b = (byte)128;//-128
        byte b = (byte)130;//-126
    4)字符参与运算(查找ASCII里面的值)
        '0':48,'A':65,'a':97
        'a' + 1;//98
    5)字符串参与运算(实际是字符串的拼接)
        "hello"+'a'+1;//helloa1
        'a'+1+"hello";//98hello —— 从左到右,先运行'a'+1得98,再将98和"hello"拼接
        "5+5="+5+5;//5+5=55
        5+5+"=5+5";//10=5+5 —— 从左到右,先运行5+5得10,再将10和"=5+5"拼接

三、运算符

1.算术运算符:+,-,*,/,%,++,--
2.赋值运算符
    1)=,+=,-=,*=,/=,%=等
    2)以下的代码哪个有问题?
        short s1 = 1;//正确。判断int常量1属于short的范围内,成功赋值。
        s1 = s1 + 1;//编译错误。s1+1的结果为int,无法赋值给short。
                
        short s2 = 1;//正确。
        s2 += 1;//正确。该表达式隐含了自动强制转换,等同于s2 = (short)(s2 + 1);
3.比较运算符(二元)
    1)==,!=,>,>=,<,<=
    2)结果为boolean类型
4.逻辑运算符
    1)&,|,^,!,&&,||
    2)结果为boolean类型
    3)解释
        &:有false则false
        |:有true则true
        ^:相同则false,不同则true。磁场关系。
        !:非true则false,非false则true
        
        &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
        ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
5.位运算符(二进制)
    1)&,|,~,^,<<,>>,>>>
    2)解释
        &:与(二元),有0则0
        |:或(二元),有1则1
        ~:非/按位取反(一元),若1则0,若0则1
        ^:异或(二元),不同则1,相同则0。注意:一个数据针对另一个数据位异或两次,该数不变
        <<:左移,低位补0
        >>:右移,符号位是什么就补什么
        >>>:无符号右移,高位补0
    3)实现两个变量的交换(int a = 1,b = 2, t;)
        a) t=a;
            a=b;
            b=t;        
        b) a=a^b;
            b=a^b;   //b==(a^b)^b,b==a
            a=a^b;   //a==(a^b)^a,a==b
        c) a=a+b;  //a==3
            b=a-b;   //b==1
            a=a-b;   //a==2
        d) a=(a+b) - (b=a);   //a==3-1,a==2;b==1
    4)最有效率的方式计算出2乘以8的结果:2<<3
        0000 0010 左移3位,即 0001 0000

你可能感兴趣的:(Java基础)