学习笔记整理(Java基础一)

一、Java语言有什么特点

  1. Java是一门面向对象的语言;
  2. Java是一门解释型语言,具有平台无关性,利用JVM运行字节码,编译后的程序在多个平台或系统都可运行,具有很好的可移植性。
  3. 提供了对web开发的支持;
  4. 有较好的安全性和可靠性,提供了异常处理和垃圾回收机制。

二、简述JVM

Java Virtual Machine(JVM),Java虚拟机是用来运行Java字节码的虚拟机,使得代码可以在多个系统或平台上运行,达到“一次编译,多处运行“的效果。

三、 JDK和JRE的区别

JDK(Java Development Kit)Java开发工具包,提供了Java的开发环境和运行环境;

JRE(Java Runtime Environment)Java开发环境,提供Java运行所需的环境;

JDK包含了JRE,它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。

JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。

四、为什么说Java语言“编译与解释并存”?

Java语言既有编译型语言的特点,又有解释型语言的特点,先把代码编译成字节码,再通过Java虚拟机来解释执行。

五、Java和C++的比较

  1. 二者都是面向对象的语言;
  2. Java不需要用指针;
  3. Java只能实现单继承,C++可以多继承,但Java可以实现多个接口;
  4. Java有自动内存管理垃圾回收机制,不用手动释放内存;
  5. C++支持方法重载和操作符重载,Java只有方法重载·

六、字符型常量和字符串型常量

  1. 表面形式:字符常量是单引号引起的一个字符,字符串常量是双引号引起的一个或多个字符;
  2. 含义:字符型常量相当于是一个整型值(ASCII 码),可以参与表达式运算,字符串常量,字符串常量代表一个地址值(该字符串在内存中存放位置);
  3. 字符型常量占两个字节,字符串常量占若干个字节。

七、泛型与泛型擦除

  1. 泛型就是指“参数化类型”,在不确定具体对象的类型时,可用泛型来解决问题,可分为泛型类、泛型接口和泛型方法;
  2. 泛型擦除:Java在编译过程中,所有泛型信息都会被擦除;

八、==和equals()

  1. 对于基本数据类型来说,==比较的是值,对于引用数据类型,==比较的是地址,equals()是Object类中的一个方法。
  2. 当equals()没有被重写时,与==的含义是一样的,若equals()被重写后,具体细节根据重写的内容决定,返回true则相等,反之不等。
  3. String 中的 equals 方法是被重写过的,因为 Object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
        String a = new String("ab"); // a 为一个引用
        String b = new String("ab"); // b为另一个引用,对象的内容一样
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 从常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一对象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");

九、equals()和hashCode()

  1. hashCode()是获取该对象相应的哈希值,找到该对象在哈希表中的索引位置,是Object类中的方法,而且是本地方法,由c或c++编写,该方法通常将对象的内存的地址转换成整型值返回。
  2. hashCode()的作用,两个相同的对象的哈希值是一定相同,但反过来是不一定的,所以判定两个对象是否相同,先用哈希值进行比较,若哈希值不同,则两个对象一定不相同,若哈希值相同,则两个对象可能相同,这时要再用equals()进行比较,equals()也得到两个对象相同,才可确定两个对象真的相同,所以,可以得知,hashCode()可减少equals()的使用,提高效率;
  3. 为什么重写equals()一定要重写hashCode()?

       hashCode()默认是对堆上的对象产生独特的哈希值,若只重写了equals()方法,就有可能会出现equals()返回true,但hashCode()判定不相等的情况,所以在重写了equals()之后,也要重写hashCode()。

     4.为什么两个对象有相同的 hashcode 值,它们也不一定是相等的?

        哈希算法可能会产生碰撞,导致不同的对象产生相同的hashCode()   

十、基本数据类型与其包装类

基本数据类型位数字节包装类
byte 81Byte
short162Short
char162Character
int324Integer
float324Float
long648Long
double648Double
boolean占用大小根据虚拟机不同有所差异Boolean

包装类声明时若不赋值默认为null,而基本数据类型有默认值且不是null;

基本数据类型是存放在虚拟机的局部变量表中,而包装类是对象类型,对象实例是存放在堆中的

包装类的常量池

Java 基本类型的包装类的大部分都实现了常量池技术。Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在[0,127]范围的缓存数据,Boolean 直接返回 True Or False

用包装类进行赋值时,若所赋值在缓存池中,即可直接赋值,无需新建对象

        int i1 = 125;
        int i2 = 125;
        Integer in1 = 125;
        Integer in2 = 125;
        System.out.println(i1 == i2); //true
        System.out.println(in1 == in2); //true
        System.out.println(i1 == in1); //true

        System.out.println("-----------------------------------------------------");
        int i3 = 500;
        int i4 = 500;
        Integer in3 = 500;
        Integer in4 = 500;
        System.out.println(i3 == i4); //true
        System.out.println(in3 == in4); //false
        System.out.println(i3 == in3); //true

        System.out.println("-----------------------------------------------------");
        //无论该数是否在[-128,127]范围内,直接赋值和用new Integer()赋值得到的对象是不同的,
        Integer i5 = 125;
        Integer in5 = new Integer(125);
        Integer i6= 500;
        Integer in6 = new Integer(500);
        System.out.println(i5 == in5); //false
        System.out.println(i6 == in6); //false

        System.out.println("-----------------------------------------------------");
        //用new Integer()原理同上
        Integer in7 = new Integer(125);
        Integer in8 = new Integer(125);
        Integer in9 = new Integer(500);
        Integer in10 = new Integer(500);
        System.out.println(in7 == in8); //false
        System.out.println(in9 == in10); //false

        //基本数据类型和包装类比较只需比较值,而包装类和包装类比较则要根据对象的生成具体分析
        System.out.println(in7 == i1); //true
        System.out.println(in9 == i3); //true

        int i0 = 1500;
        int i00 = 1500;
        System.out.println(i0 == i00); //true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值