您的位置:首页 > 编程语言 > Java开发

Java基础知识(五)

2017-03-20 11:30 225 查看
Object类中的equals方法源码

public boolean equals(Object obj) {
return (this == obj);
}


Java中,测试两个变量是否相等有两种方式,一种是用==运算符,一种是用equals方法

1.==运算符

a.比较基本类型:

用于比较基本类型变量的值,而且不需要数据类型完全一样,比如:

int a = 65;

float f = 65.0f;

char c = ‘A’;

这3个变量之间两两相等。

b.比较引用类型:

如果用==来比较引用类型变量,则比较的是引用类型变量所指向的地址是否相同,如果指向的是同一个对象,则返回true,否则返回false。

而且==运算符不能比较两个毫无关联的两个对象(类型不同,并且没有继承关系),否则会引起编译错误。

2.equals方法

a.比较基本类型:

equals是一个方法,必须通过对象来调用,所以不能用来比较基本类型

b.比较引用类型:

通过Object类中的源码我们能够看出,equals在对象比较上,其实使用的就是==运算符。实际运用中,equals方法用于比较什么,完全取决于类中如何重写equals方法。

3.hashCode方法详解:

hashCode方法返回的是当前对象的哈希值,该值是系统根据对象在内存中所处的位置而计算出来的。

但是通常我们都可以重写hashCode方法,重写该方法需要遵循如下几个原则:

1、如果两个对象通过equals方法比较返回true,则两个对象的hashCode值一定要相等

2、一个对象在任何时候都必须返回相同的hashCode值

java中的String类

String类是Java提供用来封装字符串的一个类。String类是一个不可变类,即一旦一个String对象创建以后,包含在这个对象中的字符序列是不可变的,直到这个对象销毁。

1.创建String对象的方式:

a.通过构造方法:String str = new String(“”);

b.直接赋值:String str = “”;

两种方法的区别:

a.构造方法的方式,则是无论任何时候,都创建一个新的地址来存放那个字符串序列

b.直接赋值的方式获得一个str变量,会先检查内存常量池中是否存在该字符串常量,如果存在,则指向那个常量,如果不存在,则生成一个常量。

StringBuffer类

String类是一个不可变的字符串类,而StringBuffer是一个可变的字符串类

1.把一个String对象转换成StringBuffer对象

StringBuffer strbuffer = new StringBuffer(str);


2.把一个StringBuffer对象转换成String对象

String str = strbuffer.toString();


StringBuffer的工作原理:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。

StringBuffer是可变类,在频繁进行字符串修改添加等操作时,应该使用StringBuffer而不是通过String的拼接

String和StringBuffer的区别与联系:

(1)string

1 Stirng是对象不是基本数据类型

2 String是final类,不能被继承。是不可变对象,一旦创建,就不能修改它的值。

3 对于已经存在的Stirng对象,修改它的值,就是重新创建一个对象,然后将新值赋予这个对象

(2)stringBuffer

   1 一个类似于 String 的字符串缓冲区,对它的修改的不会像String那样重创建对象。

   2 使用append()方法修改Stringbuffer的值,使用toString()方法转换为字符串。

String s1 = “hello”;
s1=“world”;


这个操作其实是:其实是创建了两个String对象。

String s2 = "hello"
s2 += "world";


这操作是:先创建一个String对象,在接下来进行字符串连接的时候,有创建了一个StringBuild(jdk1.5前是StringBuffer),然后调用append()方法,最后调用toString()方法。

StringBuilder

StringBuilder类和StringBuffer类的作用和使用方式完全一样,唯一不同的是,StringBuffer是线程安全的,而StringBuilder是线程不安全的。所以通常情况下我们应该使用StringBuilder,效率会更高一点儿,关于线程安全的问题后面再做详细讨论

Data类

Java提供了Date类来处理日期和时间,此处的Date类是指java.util包下的Date类

创建Date对象:

1.new Date(); 生成一个代表当前日期时间的Date对象

2.new Date(long date); 根据指定的long型整数来生成一个Date对象,参数表示创建的对象和1970年1月1日 00:00:00之间的时间差,以毫秒作为计时单位

常用方法:

1.getTime(); 返回该时间对应的long型整数,即从1970年1月1日 00:00:00 到该对象所表示时间之间的差值,以毫秒作为单位

2.setTime(long date); 设置该Date对象的时间

注意:Date类中的方法不易于实现国际化,大部分都被废弃了

SimpleDateFormat类

Java提供了SimpleDateFormat类来对Date类进行格式化处理

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


时间格式为:年-月-日 时:分:秒

yyyy 表示年

MM 表示月

dd 表示日

HH 表示时(24时制) hh 表示时(12时制)

mm 表示分

ss 表示秒

SSS 表示毫秒

常用方法

String format(Date date); 把一个Date对象根据一定格式转化成字符串

Date parse(String time); 把一个根据对象格式的字符串转化成Date对象

Calendar类

Date类在设计上存在一些缺陷,所以Java提供了Calendar类来更好的处理日期和时间,Calendar是一个抽象类,用于表示日历

获得Calendar实例

Calendar是一个抽象类,所以需要通过getInstance()静态方法获得Calendar的对象:

Calendar calendar = Calendar.getInstance();


该方法返回它的子类:GregorianCalendar对象

Calendar对象和Date对象互转

Date对象转化成Calendar对象:

Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);


Calendar对象转化成Date对象:

Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();


Calendar中的常用方法

int get(int field); 根据给定的日历字段获得当前时间中相应字段的值

void set(int field, int value); 将指定的日历字段设置为指定的值

void add(int field, int amount); 根据日历的规则,为给定的日历字段添加或减去指定的时间量

int getActualMaximum(int field); 返回指定日历字段可能拥有的最大值

int getActualMinimum(int field); 返回指定日历字段可能拥有的最小值

Runtime类

Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。

初始化

Runtime runtime = Runtime.getRuntime();


Runtime是单例模式

常用方法

runtime.freeMemory(); 获取程序空闲内存

runtime.totalMemory(); 获取总内存

runtime.maxMemory(); 获取程序最大内存数

runtime.gc(); 建议gc回收垃圾

runtime.exec(String str); 使用java代码执行dos命令

8中基本类型的包装类

对应

byte -> Byte
boolean -> Boolean
short -> Short
char -> Character
int -> Integer
long -> Long
float -> Float
double -> Double


基本类型和包装类之间的转换

1.基本类型转换成包装类

a.通过构造方法,生成一个包装类对象
比如:Integer i = new Integer(5);

b.通过valueOf静态方法,返回一个包装类对象
比如:Double d = Double.valueOf(6.0);


2.包装类转换成基本类型

通过包装类的xxxValue()方法
比如:Integer integer = new Integer(10);
int i = integer.intValue();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java string Date