java基础不熟悉的知识点

一、数据类型知识点

1.浮点类型数据比较会出错

float a = 0.1f;
double b = 0.1/10;
System.out.println(a==b);

结果为:false
float c = 12345678901234f;
float d = c + 1;
System.out.println(c==d);
结果为:true

对于金钱类的运算要用BigDecimal 类型 ,不能用floatdouble,比如银行业务的钱的计算

进制问题

二进制

十进制

八进制:0

十六进制:0x

int i = 10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i,i2,i3);

结果为:10,8,16

2.类型转换

数据进行运算,需要先把数据转换成同一类型才能计算

数据类型转换顺序

低---------------------------------------------------------->高

byte,short,char—>int–>long–>float–>double

自动类型转换:当一个子类型的要被父类型的引用时,这时就会自动类型转换,举个例子:
int i=100;
double=i+10;//这时就i就自动转换了double类型了称为隐式类型转换
而如果是这样:
double pi=3.1415926;
int i=pi;//这时编译会出错,说类型不兼容,就需要强制类型转换了,也成显式类型转换
应该这样写:
int i=(int)pi;

转换应当注意内存溢出问题

int i = 128;
byte b = (byte)i;
System.out.println(b);

此时b为-128
    
//原因:byte类型数据范围为-128到127,赋值128会出问题

注意点:

  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不相干的类型,如把猪转成鸡鸭
  3. 把高容量转换成低容量的时候,强制转换
  4. 转换过程种可能存在内存溢出的问题,或者精度问题!

二、变量、常量、作用域

  1. 局部变量(即方法中的变量)必须声明和初始化

  2. 实例变量(从属于对象,即某个类中的变量),可以不用初始化,会赋默认值见下表:

    数据类型默认值
    byte0
    short0
    char‘u0000’
    int0
    long0L
    float0.0f
    double0.0
    Stringnull
    booleanfalse
  3. 类变量:前面加上static修饰,如:

    static double b = 2000;
    
  4. 常量:前面加上final,并且一般用大写

    final double PI = 3.1415926;
    
  5. 变量命名规范

    (1)所有方法、变量、类名都要见名知意

    (2)实例变量

    定义:即在类中定义的变量,即类的属性,可以在new对象的时候,每个对象都有一个属性,这些属性就是类成员变量,在整个类中都可以被访问

    构成:访问修饰符 修饰符 type name = value

    命名规范:首字母小写和驼峰 lastName mouthSalary

    (3)局部变量

    定义:只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效

    命名规范:首字母小写和驼峰 lastName mouthSalary

    (4)类变量

    定义:独立于方法之外,用static修饰

    命名规范:首字母小写和驼峰 lastName mouthSalary

    public class Variable{
        
        static int allClicks=0;    // 类变量
        String str="hello world";  // 实例变量
        
        public void method(){
            int i =0;  // 局部变量
     
        }
    }
    

    (5)类名

    命名规范首字母大写和驼峰 Run() RunFast()

    (6)常量

    命名规范:全部大写,若是多个单词构成用下划线分开 MAX_VALUE

三、运算

  1. '+'的使用

    int a = 10;
    int b = 20;
    System.out.println(a+b);
    System.out.println(""+a+b);
    System.out.println(a+b+"");
    System.out.println(a+""+b);
    
    结果为:
    30
    1020
    30
    1020
    

    原因:

    ​ 当没有String类型时或者String类型在最后面的时候,加号的作用就是算数

    ​ 当String类型在最前面或者中间的位置,加号的作用就是拼接

  2. 自增++,自减- -

int a = 1;
int b = a++;
int c = ++a;
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);

结果为:

a:3
b:1
c:3

原因:

​ b = a++是先将a赋值为b,然后a自增,此时a变为2

​ c = ++a是先将a自增,再把自增后的a赋值给c,即2+1=3赋值为c

3.位运算符

A = 0011 1100 
B = 0000 1101
A&B = 0000 1100 //相对应的位都是1则结果为1,否则为0
A | B = 0011 1101 //相对应的位有一个为1则为1,都是0则为0
A ^ B = 0011 0001 //相对应的位不同则为1,相同则为0
~A= 1100 0011
A << 2得到240,即 1111 0000 //按位左移运算符。
A >> 2得到151111  //按位右移运算符。

面试题

2*8=16计算机怎么计算最快?

答案:用位运算

/*  二进制:   十进制:
	0000 0000   0
	0000 0001   1
	0000 0010   2
	0000 0011   3
	0000 0100   4
	0000 1000   8
	0001 0000   16
*/
System.out.println(2<<3);

16
  1. 三元运算符: ?:

    x ? y : z

    含义:如果x为true,则返回y,否则返回z

    int score = 60;
    String type = score<80 ? "优秀":"良好";
    //即当score<80成立时,返回冒号前的值,不成立则返回冒好后的值
    System.out.println(type);
    
    结果为:
    优秀
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值