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. 个人永久性免费-Excel催化剂功能第80波-按条件查找数字,扩展原生查找功能

    Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板. Excel数据类型知识背景介绍 用好Excel,必 ...

  2. Excel催化剂开源第10波-VSTO开发之用户配置数据与工作薄文件一同存储

    在传统的VBA开发中,若是用的是普通加载项方法,是可以存储数据在xlam上的,若用的是Com加载项方法同时是Addins程序级别的项目开发的,配置文件没法保存到工作薄中,一般另外用配置文件来存放供调用 ...

  3. .net持续集成sonarqube篇之sonarqube安装与基本配置

    系列目录 Sonarqube下载与安装 Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装 ...

  4. C#7.1 新增功能

    连载目录    [已更新最新开发文章,点击查看详细] C# 7.1 是 C# 语言的第一个点版本(更新版本). 它标志着该语言发布节奏的加速. 理想情况下,可以在每个新功能准备就绪时更快推出新功能.  ...

  5. c实现生产者消费者问题。 windows下。

    #include <stdio.h>#include <windows.h> #define P(S) WaitForSingleObject(S,INFINITE)//定义W ...

  6. Word公式显示为{EMBED Equation.DSMT4}

    具体问题表现为: 添加了Mathtype公式后显示为{EMBED Equation.DSMT4}, 超链接显示为大花括号和描述文本, 页码显示为​ page... 具体解决方法如下,(以Office2 ...

  7. C# ORM简单原理

    对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去. 在今日的企业环境中,把面向对象 ...

  8. Java初中级程序员面试题宝典

    Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...

  9. rabbitMQ_Publish/Subscribe(三)

    发布/订阅 生产者发布信息,多个订阅者可以同时接收到信息. 转发器 现在是时候在RabbitMQ中引入完整的消息传递模式了. 让我们快速了解我们在以前的教程中介绍的内容: 生产者是一个发送消息的应用程 ...

  10. 蘑菇街工程师常用的Linux命令!

    一.查看日志 线上出现了问题,登上线上的机器查日志是非常常见的操作了.我第一次登上线上机器查日志的时候,我还只记得以下的几个命令(假设现在我们的日志文件叫做service.log): cat serv ...