基础部分之SystemObjectCalendarStringBuffer
Posted chenglei0718
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础部分之SystemObjectCalendarStringBuffer相关的知识,希望对你有一定的参考价值。
System.out.println(obj)和 System.out.println(obj.toString())区别
public static void main(String[] args) Object o = new Object(); System.out.println(o);//java.lang.Object@1540e19d System.out.println(o.toString());//java.lang.Object@1540e19d
两者结果完全一致,分析:System类
out为System的静态变量
System:
public final static PrintStream out = null;
public void println(Object x) String s = String.valueOf(x); synchronized (this) print(s); newLine();
String:
public static String valueOf(Object obj)
return (obj == null) ? "null" : obj.toString();
实际上printLn方法内部调用了String的valueOf()方法,valueOf()内部又掉了Object的toString()方法,所以这两者实质是一样的效果
Object类equals()方法的作用
public static void main(String[] args) Object o1 = new Object(); Object o2 = new Object(); System.out.println(o1==o2);//false System.out.println(o1.equals(o2));//false
Object类的equals方法和==没有区别,都是比较引用对象对应内存空间的地址值,故没有实际意义,真正意义在于其子类可以重写Object的equals方法来实现想要的效果
,举个例子:
public class TestOne
public static void main(String[] args)
Person p1 = new Person("liuyan", ‘女‘);
Person p2 = new Person("yangmi", ‘女‘);
Person p3 = new Person("成龙", ‘男‘);
System.out.println(p1.equals(p2));//true
System.out.println(p1==p2);//false
System.out.println(p1.equals(p3));//false
class Person
private String name;
private char gender;
public Person(String name,char gender)
this.name = name;
this.gender = gender;
//比较Person对象重写后的的性别
@Override
public boolean equals(Object o)
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
if (gender != person.gender)
return false;
else
return true;
实际意义也就是如果有多个对象,地址值肯定不同,但只要属性值相同,用重写后的equals方法比较后就应该相等。
Calendar日历的使用
public static void main(String[] args) /** * Calendar是一个抽象类,不能创建实例 * Calendar.getInstance()得到的是Calendar的子类对象 * 这个方法可以根据本地信息(时区/语言)来获取相应版本的日历 * 如果在日本,获取的就是JapaneseImperialCalendar 日本日历 * 如果在中国,获取的就是GregorianCalendar ,格里高利历 俗称‘公历’ */ Calendar ca = Calendar.getInstance();//2019-08-16 System.out.println("ca = " + ca); //给月份向后平移两个月 ca.add(Calendar.MARCH,2); int year = ca.get(Calendar.YEAR); //国外时间是(0-11)所以需要加1 int month = ca.get(Calendar.MARCH) + 1; int day = ca.get(Calendar.DAY_OF_MONTH); System.out.println(year+"-"+month+"-"+day);//2019-10-16
在格里高利历中,月份是从0-11依次对应中国的1-12,所以在取月份的时候要加1,set月份时候要减1,但如果set和get同时用到,就不需要加1和减1
例如:
Calendar ca2 = Calendar.getInstance();//2019-08-25
ca2.set(Calendar.MARCH, 4-1);
System.out.println(ca2.get(Calendar.MARCH)+1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(ca2.getTime()));
Calendar ca3 = Calendar.getInstance();//2019-08-25
ca3.set(Calendar.MARCH, 4);
System.out.println(ca3.get(Calendar.MARCH));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(ca3.getTime()));
//结果
4
2019-04-25
4
2019-05-25
System类arraycopy方法 数组复制
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将 数组中指定的数据拷贝到另一个数组中。
private static void arrayCopy() /** * 前提是目标数组要又对应的值,不能造成数组越界异常 */ Integer[] arr1 = 1, 2, 3, 4, 5; Integer[] arr2 = 6,7,8,9; System.arraycopy(arr1,2,arr2,0,3); System.out.println(Arrays.toString(arr2));
StringBuffer与String的区别
- 由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改
- 而StringBuffer刚好对此进行了优化,它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动 维护数组的扩容。原理如下图所示:(默认16字符空间,超过自动扩充)
- 两个常用方法 append()和toString
以上是关于基础部分之SystemObjectCalendarStringBuffer的主要内容,如果未能解决你的问题,请参考以下文章