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

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

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

    一.集群自启动脚本 1.关闭zk [root@localhost bin]# jps Jps QuorumPeerMain [root@localhost bin]# //kill或者stop都是可以 ...

  2. 大数据入门第一天——基础部分之Linux基础(环境准备与先导知识)

    一.Linux环境安装 1.VM的安装 参考Linux环境搭建随笔:http://www.cnblogs.com/jiangbei/p/7248054.html 2.CentOS的安装 同参考上述随笔 ...

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

    一.概述 1.是什么? 根据凡技术必登其官网的原则,我们先去官网瞅一瞅:http://zookeeper.apache.org/ Apache ZooKeeper is an effort to de ...

  4. JavaSE部分之(1)Java基础

    JavaSE部分之(1)Java基础 1.为什么重写equals还要重写hashcode 为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那就没必要再进行equ ...

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

    类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...

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

    4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...

  7. java基础解析系列(一)---String、StringBuffer、StringBuilder

    java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...

  8. 页面制作部分之PS切图

    页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面 ...

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

    几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...

随机推荐

  1. RecycleView文字吸顶,点击吸顶布局刷新数据

    实现效果 需求 Recycle有一个头布局,可以跟随列表进行滑动 点击头布局之后可以重新加载列表数据 随着头布局的消失,留下一个可点击的布局(该布局在头布局中) 效果类似下图: 淘宝的商品列表,随着我 ...

  2. random,time,sys,os

    import random print(random.random()) #(0,1)大于0且小于1之间的小数 print(random.randint(1,3)) #大于等于1且小于等于3之间的整数 ...

  3. ajax同步与异步 理解

    例如,小明去餐馆排队点餐,前台服务员将小明的菜单告诉厨师进行制作,此时小明后面排队的人就一直等着,直到厨师制作完成,把饭菜送到小明手里后离开,后面的人才能继续点餐:这就是同步处理 但是,如果前台服务员 ...

  4. iOS中基于协议的路由设计

    一.背景 前段时间对我们自己的App做了结构上的重构,抛弃了之前简单的MVC开发模式,原因是随着App的业务线越来越多,单个页面的功能越来越复杂,MVC开发模式导致整个Controller-layer ...

  5. javascript基础学习第三天

    ☞ 命名法: 小驼峰命名法 和 大驼峰命名法(帕斯卡命名法) 变量命名规则:遵循小驼峰命名法 [变量名第一个字母小写后面每一个单词的首字母大写] var userNameAge; 函数命名规则:遵循帕 ...

  6. Android的简述

    程序截图 先来简单了解下程序运行的效果 程序入口点  类似于win32程序里的WinMain函数,Android自然也有它的程序入口点.它通过在AndroidManifest.xml文件中配置来指明, ...

  7. 【iOS】PrefixHeader.pch

    还不太理解,暂且记下.

  8. Android native进程间通信实例-binder结合共享内存

    在android源码的驱动目录下,一般会有共享内存的相关实现源码,目录是:kernel\drivers\staging\android\ashmem.c.但是本篇文章不是讲解android共享内存的功 ...

  9. MyBatis 核心配置综述之StatementHandler

    目录 MyBatis 核心配置综述之StatementHandler MyBatis 四大组件之StatementHandler StatementHandler 的基本构成 StatementHan ...

  10. 通过自制yum源离线安装ansible

    系统环境 --CentOS release 7 python版本--Python 3.5.4   背景:在企业环境中,安装ansible的服务器往往不能访问互联网,简单的下载ansible源码安装,会 ...