java基本类型占存储空间大小—大小固定不像大多数语言那样随硬件架构变化而变化
- 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 (即,认为这两个对象相等)
public class test1 {
//String 中的 equals 方法是被重写过的
public static void main(String[] args) {
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, String已经覆盖了equals()方法
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
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
没有实现