【javase06~常用类】

【部分内容来自网络,侵删】

常用类

Object

object类是所有类的根类。

toString

返回方法的字符串形式

equals

判断两个对象是否相等
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

String

字符串常量池:

  1. class文件常量池
    在Class文件中除了有类的版本【高版本可以加载低版本】、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table)【此时没有加载进内存,也就是在文件中】,用于存放编译期生成的各种字面量和符号引用。
    下面对字面量和符号引用进行说明
    字面量
    字面量类似与我们平常说的常量,主要包括:
    (1)文本字符串:就是我们在代码中能够看到的字符串,例如String a = “aa”。其中”aa”就是字面量。
    (2)被final修饰的变量。
    符号引用
    主要包括以下常量:
    (1)类和接口和全限定名:例如对于String这个类,它的全限定名就是java/lang/String。
    (2)字段的名称和描述符:所谓字段就是类或者接口中声明的变量,包括类级别变量(static)和实例级的变量。
    方法的名称和描述符。所谓描述符就相当于方法的参数类型+返回值类型。
  2. 运行时常量池
    我们知道类加载器会加载对应的Class文件,而上面的class文件中的常量池,会在类加载后进入方法区中的运行时常量池【此时存在在内存中】。并且需要的注意的是,运行时常量池是全局共享的,多个类共用一个运行时常量池。并且class文件中常量池多个相同的字符串在运行时常量池只会存在一份。
    注意运行时常量池存在于方法区中。
  3. 字符串常量池
    看名字我们就可以知道字符串常量池会用来存放字符串,也就是说常量池中的文本字符串会在类加载时进入字符串常量池。
    那字符串常量池和运行时常量池是什么关系呢?上面我们说常量池中的字面量会在类加载后进入运行时常量池,其中字面量中有包括文本字符串,显然从这段文字我们可以知道字符串常量池存在于运行时常量池中。也就存在于方法区中。
    不过在周志明那本深入java虚拟机中有说到,到了JDK1.7时,字符串常量池就被移出了方法区,转移到了堆里了。
    那么我们可以推断,到了JDK1.7以及之后的版本中,运行时常量池并没有包含字符串常量池,运行时常量池存在于方法区中,而字符串常量池存在于堆中。
       String str1 = new String("1");
       解析:首先此行代码创建了两个对象,在执行前会在常量池中创建一个"1"的对象,然后执行该行代码时new一个"1"的对象存放在堆区中;然后str1指向堆区中的对象;

       str1.intern();
       解析:该行代码首先查看"1"字符串有没有存在在常量池中,此时存在则直接返回该常量,这里返回后没有引用接受他,【假如不存在的话在 jdk1.6中会在常量池中建立该常量,在jdk1.7以后会把堆中该对象的引用放在常量池中】

       String str2 = "1";
       解析:此时"1"已经存在在常量池中,str2指向常量池中的对象;


       System.out.println(str1 == str2);  //结果是 false or true?
       解析:str1指向堆区的对象,str2指向常量池中的对象,两个引用指向的地址不同,输入false;

       String str3 = new String("2") + new String("2");
       解析:此行代码执行的底层执行过程是 首先使用StringBuffer的append方法将"2"和"2"拼接在一块,然后调用toString方法new出“22”;所以此时的“22”字符串是创建在堆区的;

       str3.intern();
       解析:此行代码执行时字符串常量池中没有"22",所以此时在jdk1.6中会在字符串常量池中创建"22",而在jdk1.7以后会把堆中该对象的引用放在常量池中;
       String str4 = "22";
       解析:此时的str4在jdk1.6中会指向方法区,而在jdk1,7中会指向堆区;
       System.out.println(str3 == str4); //结果是 false or true?
       解析:很明显了 jdk1.6中为false 在jdk1.7中为true;

       String str1 = "aaa";
       解析:str1指向方法区;

       String str2 = "bbb";
       解析: str2 指向方法区

       String str3 = "aaabbb";
       解析:str3指向方法区

       String str4 = str1 + str2;
       解析:此行代码上边已经说过原理。str4指向堆区

       String str5 = "aaa" + "bbb";
       解析:该行代码重点说明一下,jvm对其有优化处理,也就是在编译阶段就会将这两个字符串常量进行拼接,也就是"aaabbb";所以他是在方法区中的;’

       System.out.println(str3 == str4); // false or true
       解析:很明显 为false, 一个指向堆 一个指向方法区

       System.out.println(str3 == str4.intern()); // true or false
       解析:jdk1.6中str4.intern会把“aaabbb”放在方法区,1.7后在堆区,所以在1.6中会是true 但是在1.7中是false

       System.out.println(str3 == str5);// true or false
       解析:都指向字符串常量区,字符串长常量区在方法区,相同的字符串只存在一份,其实这个地方在扩展一下,因为方法区的字符串常量是共享的,在两个线程同时共享这个字符串时,如果一个线程改变他会是怎么样的呢,其实这种场景下是线程安全的,jvm会将改变后的字符串常量在
       字符串常量池中重新创建一个处理,可以保证线程安全

       String t1 = new String("2");
       解析:创建了两个对象,t1指向堆区
       String t2 = "2";
       解析:t2指向字符串常量池
       t1.intern();
       解析:字符串常量池已经存在该字符串,直接返回;
       System.out.println(t1 == t2); //false or true
       解析:很明显 false
       String t3 = new String("2") + new String("2");
       解析:过程同问题1 t3指向堆区
       String t4 = "22";
       解析:t4 在1.6 和 1.7中指向不同
       t3.intern();
       解析: 字符串常量池中已经存在该字符串 直接返回
       System.out.println(t3 == t4); //false or true
       解析: 很明显为 false 指向不同的内存区
intern

intern函数的作用是将对应的符号常量进入特殊处理,在1.6以前 和 1.7以后有不同的处理;
  先看1.6:
      在1.6中,intern的处理是 先判断字符串常量是否在字符串常量池中,如果存在直接返回该常量,如果没有找到,则将该字符串常量加入到字符串常量区,也就是在字符串常量区建立该常量;
  在1.7中:
      在1.7中,intern的处理是 先判断字符串常量是否在字符串常量池中,如果存在直接返回该常量,如果没有找到,说明该字符串常量在堆中,则处理是把堆区该对象的引用加入到字符串常量池中,以后别人拿到的是该字符串常量的引用,实际存在堆中;

length

返回字符串中字符的个数

substring

返回字符串的子字符串

contains

判断字符串中是否包含另一个字符串

startsWith/endsWith

判断字符串是否以某字符串开头/结尾

indexOf/lastIndexOf

返回字符串第一次/最后一次出现在字符串中的索引

charAt

获取对应位置的字符

toCharArray

将字符串转化为一个字符数组

toUpperCase/toLowerCase

将字符串转化为对应的大写/小写

valueOf

将基本数据类型转化为字符串

StringBuffer

可变字符串序列,同时是线程安全的

append

追加字符串,注意返回的是一个StringBuffer对象

insert

在字符串中插入字符串,返回的仍是一个StringBuffer对象

delete

删除字符串的子字符串,返回的仍是一个StringBuffer对象

replace

对字符串进行替换,返回的仍是一个StringBuffer对象

reverese

对字符串做反转

StringBuilder

可变字符串序列,但是是线程不安全的

包装类

基本类型 包装类型
byte Byte
int Integer
short Short
long Long
float Float
double Double
boolean Boolean
char Character
parseXXX()

将字符串转化为基本数据类型

Date

描述日期的类

after

测试此日期是否在指定日期之后。

before

测试此日期是否在指定日期之前。

compareTo

比较两个日期的顺序。

getTime

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

setTime

设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。

toString

把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

DateFormat

对日期进行格式化,这是一个抽象类,使用时一般使用SimpleDateFormat类。

getInstance

获取实例对象

format

将一个日期格式化为一个字符串

parse

从给定字符串的开始解析文本,以生成一个日期。

edd.png

Calendar

getInstance

获取Calendar实例对象

get

获取字段值

set

设置字段值

常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期几

Arrays

用于操作数组的工具类

sort

对数组进行排序

toString

打印数组

equals

比较两个数组是否否相等

copyOf

对数组进行copy

binarySearch

对有序数组进行二分法查找

asList

将数组转化为list类型的对象

Math

数学计算的类库

abs

求取绝对值

ceil

向下取整

floor

向上取整

round

四舍五入

BigInteger

任意精度的整数的类

add

加法运算

subtract

减法运算

multiply

乘法运算

divide

除法运算

BigDecimal

任意精度的小数类型

add

加法运算

subtract

减法运算

multiply

乘法运算

divide

除法运算

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容