基础部分之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);//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的更多相关文章
- 大数据入门第二天——基础部分之zookeeper(下)
一.集群自启动脚本 1.关闭zk [root@localhost bin]# jps Jps QuorumPeerMain [root@localhost bin]# //kill或者stop都是可以 ...
- 大数据入门第一天——基础部分之Linux基础(环境准备与先导知识)
一.Linux环境安装 1.VM的安装 参考Linux环境搭建随笔:http://www.cnblogs.com/jiangbei/p/7248054.html 2.CentOS的安装 同参考上述随笔 ...
- 大数据入门第二天——基础部分之zookeeper(上)
一.概述 1.是什么? 根据凡技术必登其官网的原则,我们先去官网瞅一瞅:http://zookeeper.apache.org/ Apache ZooKeeper is an effort to de ...
- JavaSE部分之(1)Java基础
JavaSE部分之(1)Java基础 1.为什么重写equals还要重写hashcode 为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那就没必要再进行equ ...
- .NET基础 (11)类型的基类System.Object
类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...
- 第4章 类型基础 -- 4.1 所有类型都从System.Object派生
4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...
- java基础解析系列(一)---String、StringBuffer、StringBuilder
java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...
- 页面制作部分之PS切图
页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面 ...
- NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”
几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...
随机推荐
- 个人永久性免费-Excel催化剂功能第80波-按条件查找数字,扩展原生查找功能
Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板. Excel数据类型知识背景介绍 用好Excel,必 ...
- Excel催化剂开源第10波-VSTO开发之用户配置数据与工作薄文件一同存储
在传统的VBA开发中,若是用的是普通加载项方法,是可以存储数据在xlam上的,若用的是Com加载项方法同时是Addins程序级别的项目开发的,配置文件没法保存到工作薄中,一般另外用配置文件来存放供调用 ...
- .net持续集成sonarqube篇之sonarqube安装与基本配置
系列目录 Sonarqube下载与安装 Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装 ...
- C#7.1 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C# 7.1 是 C# 语言的第一个点版本(更新版本). 它标志着该语言发布节奏的加速. 理想情况下,可以在每个新功能准备就绪时更快推出新功能. ...
- c实现生产者消费者问题。 windows下。
#include <stdio.h>#include <windows.h> #define P(S) WaitForSingleObject(S,INFINITE)//定义W ...
- Word公式显示为{EMBED Equation.DSMT4}
具体问题表现为: 添加了Mathtype公式后显示为{EMBED Equation.DSMT4}, 超链接显示为大花括号和描述文本, 页码显示为 page... 具体解决方法如下,(以Office2 ...
- C# ORM简单原理
对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去. 在今日的企业环境中,把面向对象 ...
- Java初中级程序员面试题宝典
Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...
- rabbitMQ_Publish/Subscribe(三)
发布/订阅 生产者发布信息,多个订阅者可以同时接收到信息. 转发器 现在是时候在RabbitMQ中引入完整的消息传递模式了. 让我们快速了解我们在以前的教程中介绍的内容: 生产者是一个发送消息的应用程 ...
- 蘑菇街工程师常用的Linux命令!
一.查看日志 线上出现了问题,登上线上的机器查日志是非常常见的操作了.我第一次登上线上机器查日志的时候,我还只记得以下的几个命令(假设现在我们的日志文件叫做service.log): cat serv ...