基础部分之System、Object、Calendar、StringBuffer

System.out.println(obj)和 System.out.println(obj.toString())区别

public static void main(String[] args) {
        Object o = new Object();
        System.out.println(o);//[email protected]
        System.out.println(o.toString());//[email protected]
    }

两者结果完全一致,分析: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-25ca2.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-25ca3.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

原文地址:https://www.cnblogs.com/chenglei0718/p/11361450.html

时间: 2024-11-18 00:44:28

基础部分之System、Object、Calendar、StringBuffer的相关文章

大数据入门第二天——基础部分之zookeeper(下)

一.集群自启动脚本 1.关闭zk [[email protected] bin]# jps 3104 Jps 2805 QuorumPeerMain [[email protected] bin]# kill -9 2805 //kill或者stop都是可以的 2.远程执行命令 [[email protected] bin]# ssh 192.168.137.138 /opt/zookeeper/zookeeper-3.4.5/bin/zkServer.sh start [email prote

.NET基础 (11)类型的基类System.Object

类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类System.Object1 是否存在不继承自System.Object类型的类 通过运行ILasm.exe的noautoinherit开关,可以生产不从System.Object继承的类型,这种类型是不安全的类型,也不建议使用. 2 在System.Object中定义的三个比较方法有何异同 静态方

第4章 类型基础 -- 4.1 所有类型都从System.Object派生

4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法. System.Object类提供了如下表所示的公共实例方法: 表4-1 System.Object的公共方法 Equals 若两个对象具有相同的值,就返回 true .详情请参考"对象相等性和同一性" GetHashCode 返回对象的值的哈希码.如果某个类型的对象要

Java基础----Java中的String和StringBuffer

String和StringBuffer String是一个特殊的对象,一旦被初始化,就不会被改变.()指的是abc 不是变量 s1. String s1="abc"; s1是一个类类型变量,"abc"是一个对象. String s2=new String("abc"); s1和s2的区别: s1在字符串常量池中创建了一个abc字符串 s2在堆中创建了两个对象一个是默认对象一个是字符串对象. ==和equals的区别 ==比较的是地址,equals

System.Globalization.Calendar.cs

ylbtech-System.Globalization.Calendar.cs 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endregion

预定义的类型“System.Object”未定义或未导入

生成网站或项目时,VS 2010 出现如下错误: 预定义的类型“System.Object”未定义或未导入 无效的引用选项 无法引用目录 解决方法: 关掉 VS 2010 重新打开即可.

4.1 所有类型都从 System.Object 派生

"运行时"要求各个类型最终都从 System.Object 派生.(显示继承/隐式继承) 提供公共方法(public): Equals 判断两个对象相等,true 表示相等. GetHashCode 返回对象的哈希值. ToString 默认返回类型的完整名称(this.GetType().FullName) GetType 返回 Type 派生的一个类型实例,指出对象的类型,返回的 Type 对象可以与反射类配合,获取与对象类型相关的元数据信息.GetType 为非虚方法,防止子类重

NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateTime”强制转换为类型“System.Object”.LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型. 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastType

System.Object 基类

System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都继承于System.Object.因此,所有的类型都具有下面这些特性: GetType()方法,获取对象的类型. Equals.ReferenceEquals和==,判断对象是否相等. ToString()方法,获取对象的字符串信息,默认返回对象带命名空间的全名.