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催化剂功能第64波-多级数据如省市区联动输入,自由配置永不失效

    日常使用各大系统过程中,数据录入的规范性一般做得都很不错,本来系统的存在很大范畴就是为了数据和管理的规范性.在Excel环境中,想得到规范性的数据录入,除非是自行对数据有很深的认识,知道哪些数据是脏乱 ...

  2. OWASP 关于会话管理 - 译文 [原创]

    英文原文:https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Session_Management_Cheat_Shee ...

  3. Shell学习心得(四):流程控制

    一.if else 1. if if 语句语法格式: if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): ]; ...

  4. Js中关于内部方法、实例方法、原型方法、静态方法的个人见解。

    function foo(name){ this.name=name; // 实例方法 this.GetName=function(){ console.log("my name is &q ...

  5. 简单web网页与SSM后台交互

    简单web网页与SSM后台交互 情况说明 如今,已经搭建好SSM后台开发环境,并且可以经由postman工具测试成功.现在尝试写出web前端网页,通过实现简单的提交.注册.查询功能来加深对前后端数据传 ...

  6. Java创建线程的两个方法

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  7. Apache Httpd 启用重定向 rewrite

    1.启用模块 由:#LoadModule rewrite_module modules/mod_rewrite.so 更改为:LoadModule rewrite_module modules/mod ...

  8. Java:jdbc连接mysql数据库

    安装eclipse和mysql的步骤这里不赘述了. 1.一定要下jar包 要想实现连接数据库,要先下载mysql-connector-java-5.1.47(或者其他版本)的jar包.低版本的jar包 ...

  9. python课堂整理5---元组

    一.元组   Tuple tu = (111, 22, 33, "alex", (11,22), [(33, 44)], True, ) 元组元素不可被修改,不能被增加或删除 一般 ...

  10. Python之父新发文,将替换现有解析器

    花下猫语: Guido van Rossum 是 Python 的创造者,虽然他现在放弃了"终身仁慈独裁者"的职位,但却成为了指导委员会的五位成员之一,其一举一动依然备受瞩目.近日 ...