黑马程序员技术交流社区

标题: java学长笔记 [打印本页]

作者: MengDeKaiShi    时间: 2014-12-30 10:46
标题: java学长笔记
一、数值类型
(一)进制表示
        (1)二进制:以0b开头,0b0111——7
        (2)八进制:以0开头,010——8
        (3)十六进制:以0x开头,0xB——11
(二)原码、补码、反码(7为例,最高位为符号位,0为正,1为负)
                                        正数                                                负数
        原码                   0000 0111                                          1000 0111
       
        反码                        同原码                                          1111 1000(除符号位外,其余各位反)

        补码                        同原码                                          1111 1001(反码+1)
在计算机中,为了运算方便,数据都是以二进制补码形式存在的。CPU只能进行加法,减法是在加法器的基础上完成的。1-1相当于1+(-1)。
一个有符号的数,其他代表数值的范围为-2^(n-1)~[2^(n-1)]-1,n为bit位数
一个无符号数,0~2^(n-1),n为bit位数
(三)JAVA数据类型
byte—1字节,short—2字节, int—4字节, long—8字节,float—4字节,double—8字节
char—2字节

                                                      整数类(byte,short,int, long)
                                           数值型         
                                                                                                      浮点类型(float,double)
                       基本数据类型        字符型(char)
                                          
                                           布尔型(boolean)


                数据类型
                     
                                            类(class)

                        引用数据类型        接口(interface)

                                                                                        数组([ ])
整数变量默认为int型,浮点型变量默认为double型。声明long型数据,若数据超过int的最大值,则必须后接'l'或者'L';声明float类型数据,必须后接'f'或者'F',否则会抛错。
变量必须先初始化再使用。
boolean只能用true、false表示而不能用0、1(这里与C语言不通)。






/*易错例子*/
class Demo
{
        public static void main(String[] args)
        {
                byte b1=3;
                byte b2=4;
                byte b3=b1+b2;//会报错,因为java编译器编译时无法判断
                    //两个变量的和是否会超过byte的范围
                byte b4=3+4;//不会报错,因为编译器能够判断右侧的常量是否在byte范围内,
                  //java虚拟机编译的时候会将这句话编译为byte b4=7;
       
                int a=100;
                int b=200;
                int c=a+b;//这里不会抛错,因为int的范围很大,而byte范围很小,一不小心就会                                //出错,所以java对byte这种小单位进行了检查,而对int没有检查。
        }
}
二、运算符
(一)逻辑运算符
        (1)^ :逻辑异或运算,二元运算符,参与运算的双方同为false,不同为true
        (2)&和&&:逻辑与,&不论左边运算为何结果,右边都会继续运算;&&称为短路与,若左边运算为false,则整个表达式结果为false,不再运算右边,直接得false
        (3)|和||:逻辑或,|不论左边运算结果是什么,右边都会继续运算;||称为短路或,若左边运算结果为true,则整个表达式值为true,不再运算右边的表达式
(二)位运算
        (1)&按位与
        (2)|按位或
        (3)^按位异或:异或可用于两个变量值互换
                                int a=3,b=4;       
                                int c=a^b   //C=7
                                int d=c^a  //d=c^a=a^b^a=b=4
                                int e=c^b  //e=c^b=a^b^b=a=3
        (4)~按位取反(不考虑符号位,每一位都取反,运算后得到的是补码,显示出来的是                原码)
                /*使用位移进行乘除运算效率高*/
        (5)<<左移:3<<2——3左移2位(后补0),左移一位相当于乘2
        (6)>>右移:3>>1——3右移1位(前补0),右移一位相当于除2
   /* 面试题*/

        short s = 1;
        s = s + 1;
        会抛错
        整数默认是int类型的,s+1运算之后的结果为int型,然后再将这个int型的值赋值给
        short型的s,可能 会丢失精度,所以抛错

        short s = 1;
        s+=1;
        不抛错
        s+=1可以看成s=(short)s+1, +=运算默认进行强制转换,
        所以这样写不会抛错,但是可能会影响结果的正确性
%(取余操作),结果的运算符和左边的数的运算符一致




作者: bjznh    时间: 2014-12-31 09:24
写的很认真啊,
作者: 疯狂的学渣    时间: 2014-12-31 18:49
很短,感觉还好。
作者: it667135    时间: 2015-1-1 01:02
总结得很好。
作者: kk8023    时间: 2015-1-1 08:35
很到位,点赞
作者: 来自未来    时间: 2015-1-1 22:29
不错不错。。
作者: limxing    时间: 2015-1-2 12:56
值得学习。致敬致敬。。。
作者: 小僧玄奘    时间: 2015-1-3 02:13
看不到啊。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2