java基本类型占存储空间大小—大小固定不像大多数语言那样随硬件架构变化而变化

image.png

  • boolean没有规定大小,具体看各个虚拟机实现
  • 低级到高级: (byte, short, char) —int —long—float—double
  • byte有什么用
    • 通常在读取非文本文件时(如图片,声音,可执行文件)需要用字节数组来保存文件的内容,在下载文件时,也是用byte数组作临时的缓冲器接收文件内容。所以说byte在文件操作时是必不可少的。不管是对文件写入还是读取都要用到。
    • 在某些程序中(尤其是和硬件有关的程序)会将某些数据存储到字节类型的变量中,比如00110010,其中每个位都代表一个参数,然后以位运算的方式对参数进行取值和赋值操作。

字符串常量vs字符型常量

  • 字符常量是单引号引起的一个字符
    • 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算
    • 占内存大小 字符常量只占2个字节 (注意: char在Java中占两个字节)
  • 字符串常量是双引号引起的若干个字符
    • 字符串常量代表一个地址值(该字符串在内存中存放位置)
    • 字符串常量占若干个字节(至少一个字符结束标志)

构建函数不能被重写(override)

StringBuilder vs StringBuffer vs String

StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的

  • StringBuilder

    • StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的
    • 相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险
    • 单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
  • StringBuffer

    • StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
    • 多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
  • String
    • 线程安全
    • 适用少量数据

java, javax

  • javax 当时只是扩展 API 包来使用。然而随着时间的推移,javax 逐渐地扩展成为 Java API 的组成部分。

== 与 equals

  • ==: 基本数据类型==比较的是值,引用数据类型==比较的是内存地址
  • equals()
    • 类没有覆盖 equals() 方法, 等价于通过“==”比较
    • 类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)
  1. public class test1 {
  2. //String 中的 equals 方法是被重写过的
  3. public static void main(String[] args) {
  4. String a = new String("ab"); // a 为一个引用
  5. String b = new String("ab"); // b为另一个引用,对象的内容一样
  6. String aa = "ab"; // 放在常量池中
  7. String bb = "ab"; // 从常量池中查找
  8. if (aa == bb) // true
  9. System.out.println("aa==bb");
  10. if (a == b) // false,非同一对象
  11. System.out.println("a==b");
  12. if (a.equals(b)) // true, String已经覆盖了equals()方法
  13. System.out.println("aEQb");
  14. if (42 == 42.0) { // true
  15. System.out.println("true");
  16. }
  17. }
  18. }

hashcode && equals

  • hashCode() 的作用就是获取哈希码,也称为散列码
  • hashCode()在散列表中才有用,在其它情况下没用
  • 如果两个对象相等,则hashcode一定也是相同的
  • 两个对象相等,对两个对象分别调用equals方法都返回true
  • 两个对象有相同的hashcode值,它们也不一定是相等的
  • 综上,equals方法被覆盖过,则hashCode方法也必须被覆盖
  • hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

    main方法

    main方法必须是public的

list set map

  • List, 对付顺序的好帮手
  • Set, 注重独一无二的性质
  • Map, 用key来搜索的专家

RandomAccess接口

**RandomAccess 接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机访问功能。

  • ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。 RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机访问功能的!
  • LinkedList 没有实现

java使用Unicode编码