java基础2

一、基本数据类型

定义变量实际上就是申请内存来存储值,也就是说当创建变量时,需要在内存中申请空间。内存管理系统根据变量的类型来为变量分配空间。分配的存储空间只能存储该类型数据。

java的两大数据类型:内置数据类型。引用数据类型。


二、内置数据类型(八种)

六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔型

整数型:byte(8位有符号二进制补码表示的整数)、short(16位有符号二进制补码表示的整数)、int(32位有符号二进制补码表示的整数)、long(64位有符号二进制补码表示的整数)、float(32位单精度,默认值0.0f)、double(64位双精度,默认值0.0d)、char(64位unicode字符,可以存储任何字符)、boolean(默认值false)

 

string默认值是null,不属于内置数据类型。String的存储方式:英文占用一个字符,中文占用两个字符


三、引用类型

对象、数组都是引用数据类型,所有引用类型的默认值都是null,一个引用变量可以用来引用任何与之兼容的类型


四、java常量

在Java中使用final关键字来修饰常量


五、自动类型转换

整型、实型(常量)、字符型数据可以混合运算,运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。

byte->short->char->int->long->float->double(由低到高)

注意:

不能对boolean类型进行类型转化、

把容量大的类型转化为容量小的类型必须使用强制类型转换、

转换过程中可能导致溢出或损失精度、

浮点数到整数的强制类型转换是通过舍弃小数得到,而不是四舍五入


六、java运算符

算术运算符(+  -  *   /   %  ++   --)

前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。

后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算

关系运算符(==   !=   >   <    >=   <=)

位运算符(作用在所有的位上,并且按位运算。先把数字转化成二进制形式)

如何实现无符号数的右移操作

java提供了两种右移运算符。>>(有符号右移运算符)和>>>(无符号右移运算符)。两者区别:>>在执行右移操作时,若参与运算的数字为正数,则在高位补0,若为负数,则在高位补1.而>>>无论参与运算的数字为正数或负数,执行运算时都会在高位补0。

注意:在对char、byte、short等类型的数进行移位操作前,编译器都会自动将数值转换为int类型,然后才进行移位操作。由于int型变量只占32bit,因此当右移的位数超过32bit时移位运算没有意义。为了保证移动位数的有效性,采用取余的操作。即a>>n等价于a>>(n%32)

short j=-4;

system.out.print(Integer.toBinaryString(j))//11111111111111111111111111111100

j>>>1;

system.out.print(Integer.toBianryString(j))//11111111111111111111111111111110

特别说明:对于short类型来说,short只占16bit。在移位操作时会先转化成int类型,虽然在进行无符号右移时会在高位补1,但当把运算结果再赋值给short类型的变量时,只会取低位的两个字节,因此,高位补0还是1对运算结果无影响。

<<与>>有什么异同?

不同:左移运算没有有符号与无符号左移,左移时,移除高位的同时在低位补0

相同:左移运算时,如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取余。例如对int型移动33位,实际上只移动了(33%32)=1位

逻辑运算符(用于布尔类型)

短路逻辑运算符(&&)

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

public class LuoJi{
    public static void main(String[] args){
        int a = 5;//定义一个变量;
        boolean b = (a<4)&&(a++<10);
        System.out.println("使用短路逻辑运算符的结果为"+b);
        System.out.println("a的结果为"+a);
    }
}

因为a<4的结果为false,所以不会执行a++,所以a的值不变为5

赋值运算符

C + = A 与 C = C + A 是有区别的一句话总结: += 运算符既可以实现运算,又不会更改 s 的数据类型;而后者,C 和 A 必须是同一类型,否则无法直接运算

条件运算符(三元运算符)

单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。

a?b:c?d:e的计算顺序是先算c?d:e后算 a?b:(c?d:e)

instance of运算符

A instanceof B     如果A这个对象属于B这个类或者接口,则结果返回true,否则返回false

运算符优先级


七、java增强for循环 

package com.cuiinsist.myfirst.mapper;

public class Main{
    public static void main(String[] args){
        int[] nums={1,2,3,4};
        for (int i:nums){
            System.out.print(i);
            System.out.print(",");
        }
        String[] names={"lili","lala","mimi","jj"};
        for(String name:names){
            System.out.print(name);
            System.out.print(".");
        }
    }
}

格式是for(声明语句:表达式){}

声明语句:声明新的局部变量,该变量的类型必须和表达式中的数组员元素的类型相匹配。其作用域限定在循环语句块中,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法


break跳出循环。如果是双层for循环,且break在最内层for循环中,则break只能跳出最内层,最外层还会执行


八、switch case

https://www.runoob.com/java/java-switch-case.html


九、Math类

java的Math包含了用于执行基本数学运算的属性和方法,Math的方法都被定义为static形式,通过Math类就可以在主函数中直接调用

常用方法:

xxxValue()

将Number对象转化为xxx数据类型的值并返回(包括byteValue()   shoreValue()  intValue()   longValue()   floatValue()   doubleValue())

a.compareTo(b)

用于比较两个相同的数据类型,两个不同类型的数据不能用此方法比较。如果a>b,返回1,如果a=b,返回0,如果a<b,返回-1

a.equals(b)

如果a与b的类型相同且数值相同,则返回true,否则返回false

valueOf

Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。

Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。

Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。radix是进制

Integer.toString()

返回一个以字符串表示的Number对象值

Integer.parseInt("9",16)

Double.parseDouble("15")

将字符串参数作为有符号的十进制整数进行解析。第一个参数是数字形式的字符串,第二个参数是进制

Math.abs(-8)

返回绝对值

Math类中round、floor、ceil方法

Math.round():四舍五入,返回值类型是int

Math.floor(a):向下取整,取小于a的最大整数,返回值类型是double

Math.ceil(a):向上取整,取大于a的最小整数,返回值类型是double                      


十、包装类

在实际开发中,经常会遇到需要使用对象,而不是内置数据类型的情况。java提供了对应八种内置数据类型的包装类

package com.cuiinsist.myfirst.mapper;

import java.util.ArrayList;
import java.util.List;

public class Charac {
    public static void main(String[] args) {
        //包装类的用法,<>里必须是包装类,不能是基本数据类型
        List<Character> list=new ArrayList();
        
        Character aa=new Character('a'); //装箱
        Character bb=new Character('a');
        char cc='a';
        char dd='a';
        huhu(aa);

        if(aa==bb){//比较的是地址,输出结果是2.也就是他们的地址不同   aa.equals(bb)比较的是存储的值
            System.out.println("1");
        }else{
            System.out.println("2");
        }
        if(cc==dd){//比较的是存储的值。输出结果是3
            System.out.println("3");
        }else{
            System.out.println("4");
        }
    }

    public static void huhu(char c){//拆箱,将character类型的拆成char
        char d=c;
        System.out.println(c);

    }

}

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值