Math/System/Runtime/Object

1、Math

(1)常用方法

类型方法名说明
public static intabs (int a)返回整数的绝对值
public static doublepow (double a,double b)计算a的b次幂的值
public static int      max (int a,int b) 获取两个int值中的较大值
public static intmin (int a,int b) 获取两个int值中的较小值
public static double   ceil (double a) 返回大于或等于参数的最小整数
public static doublefloor (double a)    返回小于或等于参数的最大整数
public static int          round (float a) 按照四舍五入返回最接近参数的int类型的值
public static double   random ()      返回一个[0.0,1.0)的随机值

2、System

(1)常用方法

①时间原点:1970年1月1日00:00:00;

②1秒=1000毫秒。

类型方法名说明
public static voidexit (int status)终止当前运行的 Java 虚拟机,非零表示异常终止
public static longcurrentTimeMillis ()返回当前时间(以毫秒为单位)

(2)应用

计算程序运行时间,比较效率。

3、Runtime

现在忽略。

4、Object

(1)public String toString()

①说明

a. 以哪种字符串的形式返回对象,至于是哪种形式,就看方法中如何定义的了。

b. Object类中返回字符串的形式为类名@对象的内存地址。

c. 一般会重写从父类中继承的toString方法,返回属性值,因为内存地址没什么用。

②Object类中的toString方法的源码

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

③System.out.println()方法的代码:

(2)public boolean equals(Object o)

Object类中的equals方法比较的是两个对象的地址值是否相同。

①equals方法的源码:

public boolean equals(Object obj) {
        return (this == obj);
}

③String类中重写了Object类中的equals方法,比较所存的字符串是否相同。 

大致原理如下:

1、首先比较引用地址

如果两个字符串对象引用地址相同(即指向同一个内存地址),则它们一定是相等的,直接返回true。

2、然后比较字符串内容

它会逐个比较每个字符是否相同,直到找到不相同的字符或者比较完所有字符。

3、对特殊情况的处理

①例如对null的处理,如果调用equals()方法的对象为null,则直接返回false;如果两个对象中有一个为null,也直接返回false。

②如果传入的对象不是String类型,返回false。

下面是简化代码:

public boolean equals(Object anObject) {
    // 如果是同一个引用,直接返回true
    if (this == anObject) {
        return true;
    }
    
    // 如果传入的对象不是String类型,返回false
    if (!(anObject instanceof String)) {
        return false;
    }
    
    // 强制类型转换为String类型
    String anotherString = (String)anObject;
    int length = value.length;
    
    // 比较字符串长度是否一致
    if (length != anotherString.value.length) {
        return false;
    }
    
    // 逐个字符比较
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = 0;
    while (length-- != 0) {
        if (v1[i] != v2[i])
            return false;
        i++;
    }
    return true;
}

(3)protected Object clone()

①说明

把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制。

对象克隆的分类:

深克隆和浅克隆

浅克隆:

不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来;

基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。

Object类默认的是浅克隆。

深克隆:

基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的。

也有第三方的克隆类去使用;一个简单的例子:

//首先有一个被克隆的对象
        int[] data = {1, 2, 3, 4, 5, 6};
        User u1 = new User(1, "zhangsan", "1234qwer", "1", data);
        //调用第三方写的克隆方法
        Gson gson = new Gson();
        //将对象变成字符串的格式
        String s = gson.toJson(u1);
        System.out.println(s);
        //克隆
        User user = gson.fromJson(s, User.class);
        System.out.println(user);

    }

问题1:为什么需要重写子类中的clone方法才能访问?

首先Object类是java.lang包下的,子类User继承了其中的clone方法,但是与User同包下的测试类无法直接访问clone方法,重写User中的clone方法,与User同包下的测试类就可以访问到此方法了。

总结就是:重写是为了让这个方法存在于这个包,就可以同包下类能访问了。

5、Objects

①私有化构造方法,外界无法创建其对象;

②都是静态方法,可通过类名.方法名去访问。

综上,Objects是一个工具类。

6、BigInteger

可以用来表示很大很大的数,有多大都可以。

(1)如何获取一个BigInteger类型的对象?

一般有构造方法和静态方法。

①构造方法

//获取指定的大整数,参数传递的是字符串格式
//我觉得这种的应用就是int不能表示时,转为BigInteger
BigInteger num2 = new BigInteger("211111111111111111");

②静态方法 

//还有一个静态方法可以用来获取大整数,但是要在long类型的取值范围内
//System.out.println(Long.MAX_VALUE);
BigInteger num = BigInteger.valueOf(9223372036854775807L);

下面是valueOf方法的源码: 

还有一个特点:BigInteger对象一旦创建内部中的中的数便不可改变。没什么感觉。看到一个评论这样说的:如果是以前2个值中是一定会有一个值去存储3的,所以2个值没有一个改变成3,而是创建一个新的对象去存储3。

(2)常用方法

知道如何用就可以了。

7、BigDemical

浮点数由于存储方式的原因,有的小数部分在计算机中是无法准确存储,可能会存在精度丢失问题。

而BigDecimal能进行小数的精确运算。

(1)如何获取一个BigDecimal类型的对象?

一般有构造方法和静态方法。

①构造方法

//1、传入double类型的数据
//但这种也有可能是不精确的,所以要避免使用这种方式
BigDecimal bd1 = new BigDecimal(0.1);
//2、传入字符串类型,不会有这种问题
BigDecimal bd2 = new BigDecimal("0.1");

 

BigDecimal底层存储原理:数组中存的是每一个字符在ASCII码表中对应的数字。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/796199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue学习day07-scoped样式冲突、data是一个函数、props详解、组件通信、非父子通信-event bus 事件总线

19、scoped样式冲突 (1)默认情况:写在组件中的样式会全局生效,因此会很容易造成多个组件之间的样式冲突问题。 1)全局样式:默认组件中的样式会作用到全局 比如: 当只有box1设置边框时&#…

Unity如何查找两个transform最近的公共parent

查找两个子对象最近的父对象 一、问题背景二、解决方案思路核心算法代码 三、总结 一、问题背景 最近看到个关于Unity的问题:在Hierarchy面板中的游戏对象,给定两个子物体transform对象,如何查找这两个transform最近的公共父级parent。感觉挺…

应用帕累托原则学习新的编程语言

在本文中,我将讨论如何应用帕累托原则快速学习一门新的编程语言,并在加深对编程语言的理解的同时开始解决实际问题。 什么是帕累托原则? 帕累托原则,又称 80/20 法则,指出对于许多结果而言,大约 80% 的后…

【简历】某电子科技大学:前端实习简历指导,面试通过率低

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份一本某电子科技大学的同学简历,投递的职位就是我们前端,但是因为学校是一本,我们说主要主体在…

【Lora模型推荐】Stable Diffusion创作具有玉石翡翠质感的图标设计

站长素材AI教程是站长之家旗下AI绘图教程平台 海量AI免费教程,每日更新干货内容 想要深入学习更多AI绘图教程,请访问站长素材AI教程网: AI教程_深度学习入门指南 - 站长素材 (chinaz.com) logo版权归各公司所有!本笔记仅供AIGC…

Cesium 点选3DTiles泛光特效

Cesium 点选3DTiles泛光特效 原理:和上一篇点选Entity相同 直接上效果:

StarRocks部署高可用 FE 集群

一、准备工作 1.1 部署规划 这里我打算部署存算一体模式,三节点。即三个FE节点,三个BE节点。假设三台IP分别为:10.10.10.50、10.10.10.51、10.10.10.52 我将采用三台centos7.9进行部署,单台配置为128C 256G 3T。 1.2 服务器检查…

GESP CCF C++ 二级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月…

【LeetCode】2187. 完成旅途的最少时间

1. 题意 2. 分析 二分法有一个关键特征:如果答案answer满足题意,那么对于任何整数i,如果有i>answer,那么i也会是一个存在的解,只不过不是最优解。 本题想要找出一个达到 totalTrips 趟需要的最少时间成本t&#x…

分布式系统中雪花ID的使用及前后台精度解决

本文介绍了雪花ID的应用场景,以及针对雪花id生成精度过大导致数据缺失的解决方案。 一、概念 雪花 ID是一种分布式 ID 生成策略,保证全局唯一,位数组成中含有时间戳,相比UUID,故也能保证自增。 二、应用场景 分库、分表、分片、…

Python 爬虫:使用打码平台来识别各种验证码:

本课程使用的是 超级鹰 打码平台, 没有账户的请自行注册! 超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大 使用打码平台来攻破验证码难题, 是很简单容易的, 但是要钱! 案例代码及测…

Ubuntu安装MATLAB

一、准备工作 下载MATLAB安装文件: 访问MathWorks官方网站(MathWorks官网),下载适用于Linux的MATLAB安装文件。这通常是一个.iso镜像文件或.zip压缩文件。请注意选择与Ubuntu版本相匹配的MATLAB版本。创建安装目录: 打…

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

英特尔CPU研发团队繁忙的一天

早晨&#xff1a;准备与启动 7:00 AM - 起床与准备 研发团队的工程师们早早起床&#xff0c;快速洗漱并享用健康的早餐。部分工程师会进行晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达办公室 工程师们来到位于硅谷的英特尔总部&#xff0c;进入研发中心。…

Ubuntu 安装搜狗输入法

搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010 各系统安装步骤可能略有不同 1、添加中文语言支持 打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言” 弹出“已安装语言”窗口&#xff0c;勾选中文&#xff08;简体&…

Qt之元对象系统

Qt的元对象系统提供了信号和槽机制&#xff08;用于对象间的通信&#xff09;、运行时类型信息和动态属性系统。 元对象系统基于三个要素&#xff1a; 1、QObject类为那些可以利用元对象系统的对象提供了一个基类。 2、在类声明中使用Q_OBJECT宏用于启用元对象特性&#xff0c…

5 个搜索 deb 软件包的好地方

基于 Debian 的 Linux 发行版上有一个共同特点&#xff1a;为用户提供了很多可选的软件。当涉及到为 Linux 制作软件时&#xff0c;所有的大公司都首先瞄准这种类型的 Linux 发行版。甚至一些开发人员根本不打算为其他类型的 Linux 发行版打包&#xff0c;只做 DEB 包。 然而&…

easyExcel 不规则模板导入数据

文章目录 前言一、需求和效果二、难点和思路三、全部代码踩坑 前言 之前分享的 EasyExcel 批量导入并校验数据&#xff0c;仅支持规则excel&#xff0c;即首行表头&#xff0c;下面对应数据&#xff0c;无合并单元格情况。 本篇主要解决问题&#xff1a; 模板excel 表头不在首…

Macos 远程登录 Ubuntu22.04 桌面

这里使用的桌面程序为 xfce, 而 gnome 桌面则测试失败。 1,安装 在ubuntu上&#xff0c;安装 vnc server与桌面程序xfce sudo apt install xfce4 xfce4-goodies tightvncserver 2&#xff0c;第一次启动和配置 $ tightvncserver :1 设置密码。 然后修改配置&#xff1a…

[Spring] Spring Web MVC基础理论

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…