1. hashCode方法

代码:

  1. package NeiBuLei;
  2. public class hashCode {
  3. public static void main(String[] args) {
  4. AA aa = new AA();
  5. AA aa2 = new AA();
  6. AA aa3 = aa;
  7. AA aa4 = aa2;
  8. System.out.println("aa.hashCode()="+ aa.hashCode()); //aa.hashCode()=2129789493
  9. System.out.println("aa2.hashCode()="+ aa2.hashCode()); //aa2.hashCode()=1313922862
  10. System.out.println("aa3.hashCode()="+ aa3.hashCode()); //aa3.hashCode()=2129789493
  11. System.out.println("aa4.hashCode()="+ aa4.hashCode()); //aa4.hashCode()=1313922862
  12. }
  13. }
  14. class AA{}

两个引用,如果指向的是同一个对象,则哈希值肯定一样

两个引用,如果指向的是不同对象,则哈希值是不一样的

哈希值主要根据地址号来!不能将哈希值完全等价于地址

2. toString方法

代码:

  1. package NeiBuLei;
  2. public class toString {
  3. public static void main(String[] args) {
  4. test test = new test(1,2,3);
  5. test.toString();
  6. System.out.println(test.toString());
  7. }
  8. }
  9. class test{
  10. public int name;
  11. public int age;
  12. public int score;
  13. @Override
  14. public String toString() {
  15. return "test{" + "name=" + name + ", age=" + age + ", score=" + score + '}';
  16. }
  17. public test() {
  18. }
  19. public test(int name,int age,int score) {
  20. this.name = name;
  21. this.age = age;
  22. this.score = score;
  23. }
  24. }

3.clone方法

代码:

  1. package NeiBuLei;
  2. //用于创建并返回一个对象的拷贝
  3. // clone 方法是浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。
  4. public class clone {
  5. public static void main(String[] args) {
  6. Charen p = new Charen(23, "zhang");
  7. Charen p1 = p;
  8. System.out.println(p); //NeiBuLei.Charen@7ef20235
  9. System.out.println(p1); //NeiBuLei.Charen@7ef20235
  10. //打印的地址值是相同的,既然地址都是相同的,那么肯定是同一个对象。p和p1只是引用而已,他们都指向了一个相同的对象
  11. // 可以把这种现象叫做引用的复制
  12. Charen s = new Charen(23, "zhang");
  13. Charen s1 = null;
  14. try { //要捕获
  15. s1 = (Charen)s.clone();
  16. } catch (CloneNotSupportedException e) {
  17. e.printStackTrace();
  18. }
  19. //两个对象的地址是不同的,也就是说创建了新的对象, 而不是把原对象的地址赋给了一个新的引用变量
  20. System.out.println(s); //NeiBuLei.Charen@27d6c5e0
  21. System.out.println(s1); //NeiBuLei.Charen@4f3f5b24
  22. }
  23. }
  24. class Charen implements Cloneable {
  25. int age;
  26. String name;
  27. public Charen() {
  28. }
  29. public Charen(int age,String name) {
  30. this.age = age;
  31. this.name = name;
  32. }
  33. @Override //重写方法
  34. protected Object clone() throws CloneNotSupportedException {
  35. return (Charen)super.clone();
  36. }
  37. }

深拷贝:深复拷贝象所引用的对象都复制了一遍

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象

浅复制仅仅复制所考虑的对象,而不复制它所引用的对象

String name 中name是String 引用,所以浅拷贝指向同一个name,深拷贝又复制了一个新的name,指向新复制的name。

4.getClass方法

代码:

  1. package NeiBuLei;
  2. //当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象
  3. //返回对象的类
  4. public class getClass {
  5. public static void main(String[] args) {
  6. Object o1= new Object();
  7. System.out.println(o1.getClass()); //class java.lang.Object
  8. A a = new A();
  9. System.out.println(a.getClass()); //class NeiBuLei.A
  10. }
  11. }
  12. class A{}

用于返回对象的类

5.equals方法

==是一个比较运算符

  1. ==: 既可以判断基本类型,又可以判断引用类型
  2. ==: 如果判断的是基本类型,判断的是值是否相等
  1. //==: 如果判断的是基本类型,判断的是 值 是否相等
  2. int x1 = 10;
  3. int x2 = 10;
  4. double x3 = 10.0;
  5. System.out.println(x1 == x2);//true
  6. System.out.println(x1 == x3);//true
  1. ==: 如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一个对象
  1. package denghao;
  2. public class Test01 {
  3. public static void main(String[] args) {
  4. //==: 如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一个对象
  5. A a = new A();
  6. A b = a;
  7. A c = b;
  8. System.out.println(a==c);// ? true
  9. System.out.println(b==c);// true
  10. B obj = a;
  11. System.out.println(obj==c);// true
  12. }
  13. }
  14. class B{}
  15. class A extends B{}

eauals:

只能判断引用类型

代码:

  1. package NeiBuLei;
  2. public class ObjectLei {
  3. public static void main(String[] args) {
  4. Person p1 = new Person();
  5. p1.name = "zyx";
  6. Person p2 = new Person();
  7. p2.name = "zyx";
  8. //flase //对象不同
  9. System.out.println(p1 == p2);// 引用类型——判断是否为同一个对象(地址)
  10. //true //字符串相同
  11. System.out.println(p1.name.equals(p2.name));// p.name是String类型,重写了equals()方法——判断内容是否一样
  12. //flase //对象不同
  13. System.out.println(p1.equals(p2));//p1,p2属于Person类,该类并没有重写equals()方法(继承父类equals()方法,即判断地址)
  14. String s1 = new String("abc");
  15. String s2 = new String("abc");
  16. //true //字符串相同
  17. System.out.println(s1.equals(s2));
  18. //false //对象不同
  19. System.out.println(s1 == s2);
  20. }
  21. }
  22. class Person{
  23. public String name;
  24. }

6.wait和notify方法

代码:

  1. package NeiBuLei;
  2. //run()和start()方法属于线程类Thread
  3. public class wait{
  4. static Object locate=new Object();
  5. public static class T1 extends Thread{ //T1线程
  6. public void run(){
  7. synchronized (locate){ //同步锁
  8. System.out.println("T1 start");
  9. try {
  10. System.out.println("T1等待locate对象");
  11. locate.wait();
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. }
  15. System.out.println("T1 end");
  16. }
  17. }
  18. }
  19. public static class T2 extends Thread{ //T2线程
  20. public void run(){
  21. synchronized (locate){ //同步锁
  22. System.out.println("T2 被唤起");
  23. locate.notify();
  24. System.out.println("T2 end");
  25. try {
  26. Thread.sleep(5000);
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }
  32. }
  33. public static void main(String[] args) {
  34. Thread t1=new T1();
  35. Thread t2=new T2();
  36. t1.start();
  37. t2.start();
  38. }
  39. }

运行结果:

  1. T1 start
  2. T1等待locate对象
  3. T2 被唤起
  4. T2 end
  5. //过几秒
  6. T1 end

(1)对象的wait()方法和notify方法

Object.wait() 线程等待,当调用wait()方法,线程就是停止执行当前任务,转为等待,直到被唤起

Object.notify() 线程唤起,将等待状态下的线程唤起,继续执行任务

(2)线程wait()和notify()的工作原理:

当对象Object调用了wait()方法后,线程进入到Object对象的等待队列,多个线程等待同一个对象

当对象Object调用了wait()方法后,就会从等待队列里面随机选取一个线程并将其唤起,完全随机

(3)注意事项:

notifyALL():唤起所有等待序列的线程

wait()和notify()都必须先获取目标对象的监视器,这样才能进行后续工作

wait方法不能随便使用,必须包含在synchronized中

JavaSE常用类之Object类的更多相关文章

  1. java 常用类库:Object类和Objects类

    1,Object类: Object类是所有的类,数组,枚举的父类,也就是说,JAVA中允许把任何的对象赋值给Object类(包括基础数据类型),当定义一个类的时候,没有使用extends关键字显示指定 ...

  2. Java基础12:深入理解Class类和Object类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  3. 夯实Java基础系列9:深入理解Class类和Object类

    目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...

  4. java class类和object类

    Class类 介绍 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息 Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类( ...

  5. Java基础知识强化26(1):Object类之Object类的概述

    1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类   2.Object类无参构造 ...

  6. Java的常用API之Object类简介

    Object类 1.toString方法在我们直接使用输出语句输出对象的时候,其实通过该对象调用了其toString()方法. 2.equals方法方法摘要:类默认继承了Object类,所以可以使用O ...

  7. Java.lang 包 (包装类、String类、Math类、Class类、Object类)

    Java 的核心 API(Application Programming Interface)是非常庞大的,这给开发者带来了很大的方便. java.lang 包是 Java 的核心类库,它包含了运行 ...

  8. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  9. Java笔记:与系统交互、系统相关的类,Object类

    1.程序与用户交互 (1)运行一个Java程序的时候要给它提供一个main方法入口,这边分析一下这个main方法的签名public static void main(String[] args);pu ...

  10. 各种异常 及异常类和Object类

    Day05 异常 Object类 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符. 2. 描述人这个 ...

随机推荐

  1. LGP5437题解

    呃怎么感觉很裸啊( 题意是让求生成树边权之和的期望,那么我们只需要算出所有生成树的边权之和除以生成树边数即可. 由于是求和,我们只需要计算出每条边对答案的贡献即可. 我们知道一个完全图有 \(n^{n ...

  2. 【Vulnhub靶场】RED: 1

    环境准备 下载靶机导入到vmware 但是获取不到地址,可以根据我博客里的方法修改网卡来获取IP地址 信息收集 我们改好网卡之后,我们使用arp-scan命令来探测靶机的IP地址 靶机IP地址为:19 ...

  3. 一文搞懂 SLAM 中的Extension Kalman Filter 算法编程

    作者 | Doreen 01 问题描述 预先知道事物未来的状态总是很有价值的! √ 预知台风的路线可以避免或减轻重大自然灾害的损失. √ 敌国打过来的导弹,如果能够高精度预测轨迹,就能有效拦截. √ ...

  4. 在基于ABP框架的前端项目Vue&Element项目中采用电子签名的处理

    在前面随笔介绍了<在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理>的处理,有的时候,我们在流程中或者一些文件签署的时候,需要签上自己的大名,一 ...

  5. nginx+keepalived 高可用方案

    nginx+keepalived 高可用方案 准备工作 192.168.157.11 192.168.157.12 安装nginx 跟新yum源文件 rpm -ivh http://nginx.org ...

  6. 3D视觉 之 线激光3D相机

    1  3D 视觉 常见的三维视觉技术,包含双目.ToF.激光三角.结构光等,如下图:     1)毫米级 双目.ToF.结构光(散斑)的精度为 mm 级,多见于消费领域,如:导航避障,VR/AR,刷脸 ...

  7. 使用MEF应用IOC(依赖倒置)

    MVC实用架构设计(二)--使用MEF应用IOC(依赖倒置)   前言 在<上篇>中,基本的项目结构已经搭建起来了,但是有个问题,层与层之间虽然使用了接口进行隔离,但实例化接口的时候,还引 ...

  8. Vue中图片的加载方式

    一.前言 VUE项目中图片的加载是必须的,那么vue中图片的加载方式有哪些呢,今天博主就抽点时间来为大家大概地捋一捋. 二.图片的加载方法 1.在本地加载图片(静态加载) 图片存放assets文件夹中 ...

  9. 羽夏笔记——Hook攻防基础

    写在前面   本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...

  10. 实现一个函数功能:sum(1,2,3,4..n)转化为 sum(1)(2)(3)(4)…(n)?

    // 使用柯里化 + 递归function curry ( fn ) {  var c = (...arg) => (fn.length === arg.length) ?           ...