day18_常用API之String类丶Object类

news2024/11/18 7:31:47

String概述

java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,同时String类提供了很多操作字符串的功能,我们可以直接使用。Java 程序中的所有字符串文字(例如“abc”)都为此类的对象

特点:
  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。String变量每次的修改其实都是产生并指向了新的字符串对象,原来的字符串对象都是没有改变的,所以称不可变字符串。
  • 以“”方式给出的字符串对象,在字符串常量池中存储。

String类创建对象的方式

方式一:直接使用“”定义。

  String s = "中国人";
方式二: 通过String类的构造器创建对象。常用的构造器有下面几个

 不同的创建方式,有不同的特点。具体如下:

  • 以" "方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
  • 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。

代码示例

public class Demo01String {
    public static void main(String[] args) {
        String s1 = "中国人";
        String s2 = "中国人";
        System.out.println(s1 == s2);//true

        char[] c = {'中', '国', '人'};
        String s3 = new String(c);
        String s4 = new String(c);
        System.out.println(s3 == s4);//false
    }
}

String类常用方法

字符串的内容比较相关的方法

代码示例

import java.util.Scanner;

public class Demo02String {
    public static void main(String[] args) {
        String okName = "admin";
        String oKPassword = "123456";
        Scanner sc = new Scanner(System.in);
        System.out.println("输入账号");
        String inputName = sc.next();
        System.out.println("输入密码");
        String inputPassword = sc.next();
        if ((okName.equals(inputName))&&(oKPassword.equals(inputPassword))){
            System.out.println("密码账号正确,登录成功..");
        }else {
            System.out.println("密码或账号不正确,登录失败..");
        }
    }
}

String中与遍历、替换、截取、分割操作相关的方法

代码示例

import java.util.Arrays;

public class Demo03String {
    public static void main(String[] args) {
        // 1、public int length(): 获取字符串的长度
        String name = "我爱你中国love";
        System.out.println(name.length());  //9

        // 2、public char charAt(int index): 获取某个索引位置处的字符
        char c = name.charAt(1);
        System.out.println(c);// 爱

        // 3、public char[] toCharArray():: 把字符串转换成字符数组
        char[] chars = name.toCharArray();
        System.out.println(Arrays.toString(chars)); //[我, 爱, 你, 中, 国, l, o, v, e]

        // 4、public String substring(int beginIndex, int endIndex) :截取内容,(包前不包后的)
        String name2 = "Java是最厉害的编程语言!";
        String rs = name2.substring(0, 4);
        System.out.println(rs);//java
        String rs1 = name2.substring(6, 8);
        System.out.println(rs1);//厉害

        // 5、public String substring(int beginIndex):从当前索引一直截取到末尾
        String rs2 = name2.substring(9);
        System.out.println(rs2); //编程语言!

        // 6、public String replace(CharSequence target, CharSequence replacement)
        String name3 = "TMD是最厉害的80后语言,TMD棒棒的!";
        String rs3 = name3.replace("TMD", "***");
        System.out.println(rs3);//***是最厉害的80后语言,***棒棒的!


        // 7、public boolean contains(CharSequence s)
        System.out.println(name3.contains("厉害")); // true
        System.out.println(name3.contains("不厉害")); // false


        // 8、public boolean startsWith(String prefix)
        System.out.println(name3.startsWith("T")); //true
        System.out.println(name3.startsWith("MD是"));// false

        // 9、public String[] split(String s): 按照某个内容把字符串分割成字符串数组返回。
        String name4 = "张三,李四,王五";
        String[] names = name4.split(",");
        System.out.println(Arrays.toString(names)); //[张三, 李四, 王五]

    }
}

Object根父类​​​​​​​

类 java.lang.Object是类层次结构的根类,即所有类的父类。每个类都使用 Object作为超类。

  • Object类型的变量与除Object以外的任意引用数据类型的对象都多态引用
  • 所有对象(包括数组)都实现这个类的方法。
  • 如果一个类没有特别指定父类,那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {
  	// ...
}

Object类中常用方法

根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。

public String toString( )

默认情况下,toString()返回的是“对象的运行时类型 @ 对象的hashCode值的十六进制形式",如果我们直接System.out.println(对象),默认会自动调用这个对象的toString()。通常是建议重写,

因为Java的引用数据类型的变量中存储的实际上时对象的内存地址,但是Java对程序员隐藏内存地址信息,所以不能直接将内存地址显示出来,所以当你打印对象时,JVM帮你调用了对象的toString()。

例如自定义的Person类:

public class Person {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //类中其他代码
}

public final Class<?> getClass():获取对象的运行时类型。

因为Java有多态现象,所以一个引用数据类型的变量的编译时类型与运行时类型可能不一致,因此如果需要查看这个变量实际指向的对象的类型,需要用getClass()方法

public class Test {
    public static void main(String[] args) {
        Object obj = new String();
        //获取对象的运行时类型
        System.out.println(obj.getClass()); //class java.lang.String
        Object ob = new Person();
        System.out.println(ob.getClass()); //class sgg1.demo02.Person
    }
}

protected void finalize( ):用于最终清理内存的方法

  • 当对象被GC确定为要被回收的垃圾,在回收之前由GC帮你调用这个方法,不是由程序员手动调用。
  • 这个方法与C语言的析构函数不同,C语言的析构函数被调用,那么对象一定被销毁,内存被回收,而finalize方法的调用不一定会销毁当前对象,因为可能在finalize()中出现了让当前对象“复活”的代码
  • 每一个对象的finalize方法只会被调用一次。
  • 子类可以选择重写,一般用于彻底释放一些资源对象,而且这些资源对象往往时通过C/C++等代码申请的资源内存 

public int hashCode():返回每个对象的hash值。主要用于后面当对象存储到哈希表等容器中时,为了提高存储和查询性能用的。

  • 如果两个对象的hash值是不同的,那么这两个对象一定不相等;
  • 如果两个对象的hash值是相同的,那么这两个对象不一定相等。
public class Test {
    public static void main(String[] args) {
        System.out.println("Aa".hashCode());//2112
        System.out.println("BB".hashCode());//2112
        System.out.println("ABC".hashCode());//64578
    }
}

public boolean equals(Object obj):用于判断当前对象this与指定对象obj是否“相等”。

  • 默认情况下,equals方法的实现等价于与“==”,比较的是对象的地址值
  • 绝大部分情况下,我们都应该去重写此方法,
import java.util.Objects;

public class Person {
    private String name;
    private int age;


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }
    //类中其他代码
}

未完待续

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑

【STM32笔记】低功耗模式下GPIO、外设、时钟省电配置避坑 前文&#xff1a; blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&#xff08;ADC唤醒无法使用、低功耗模式无法烧录解决方案&#xff09; blog.csdn.net/weixin_534033…

最强找茬小程序

文章目录准备工作环境要求安装步骤效果展示源码下载最强找茬小程序&#xff0c;支持好友对战 准备工作 准备一个Linux系统的云服务器 centos7或ubuntu 安装宝塔面板&#xff08;不是必需的&#xff0c;建议安装这个&#xff09; 买一个域名&#xff0c;并配置ssl证书&#x…

NX二次开发编译时dll自动数字签名及拷贝

前言 在UG5.0开始&#xff0c;所有基于UG二次开发的DLL都要“签名”后才能被客户端上正版的NX调用。 一、基于C# 开发签名 1、添加资源文件 &#xff08;1&#xff09;项目类库上右键–>属性–>资源–>添加资源右边小三角–>添加现有文件–>切换到UG安装目录下…

Java SSM 笔记(一)重置版

Spring核心技术 **前置课程要求&#xff1a;**请各位小伙伴先完成《JavaWeb》篇、《Java 9-17新特性》篇视频教程之后&#xff0c;再来观看此教程。 **建议&#xff1a;**对Java开发还不是很熟悉的同学&#xff0c;最好先花费半个月到一个月时间大量地去编写小项目&#xff0…

Source lnsight工具的简单使用

多文件编程推荐用Source lnsight工具来进行编写 一、Source lnsight工具的简单使用 1、在桌面上新建一个文件夹factory&#xff0c;在文件夹里新建一个cat.c文件和si文件夹 2、打开Source lnsight工具&#xff0c;点击上方Project--->New Project 3、把文件夹factory中si文…

2023年初级会计职称考试《经济法基础》大纲变动内容

整体变动:2023年度考试大纲主要作了以下调整:1. 第四章中增加了增值税出口退税和地方教育附加相关内容;2. 第五章中增加了企业重组业务企业所得税处理&#xff0c;企业所得税特别纳税调整和纳税电报表相关内容;3. 第六章中增加了印花税相关内容。具体变动:第一章 总论无变化第二…

QML矩形(Rectangle)

Rectangle 用于绘制矩形 常见的属性&#xff1a; 填充颜色&#xff1a;纯色&#xff1a;color 渐变 &#xff1a;Gradient类 渐变的优先级大于纯色Gradient&#xff08;渐变色&#xff09;&#xff1a; 渐变由多种颜色定义&#xff0c;这些颜色将无缝混合&#xff0c…

【前端基础问题】浏览器调起桌面通知功能 Notification

浏览器调起桌面通知功能 Notification一、Notification二、注意事项三、使用步骤1、向用户发起权限请求2、调用 Notification API 进行推送消息四、完整代码五、效果一、Notification Notifications API 允许网页或应用程序在系统级别发送在页面外部显示的通知;这样即使应用程序…

【Servlet+Jsp+Mybatis+Maven】WEB图书馆管理系统

web图书馆管理系统一、绪论二、流程和其页面展示效果流程页面效果项目结构三、具体实现第一步&#xff1a;备数据库表第二步&#xff1a;编写登录前端代码第三步&#xff1a;利用过滤器处理安全问题第四步&#xff1a;控制层去实现相关调用第五步&#xff1a;实现持久化层与数据…

教你如何搭建人事OA-薪资管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建人事OA-薪资管理。1.2、应用场景根据设置薪资基础及考勤和绩效的数据计算得到各个员工工资详情。2、设置方法2.1、表单搭建1&#xff09;新建表单【工资表】&#xff0c;字段设置如下&#xff1b;名称类型名称类型人员资料分…

一款私有化部署的企业级在线文档和知识库

项目介绍基础说明&#xff1a;无忧企业文档是JVS体系下的一款企业协同在线文档&#xff0c;主要服务客群为企业用户&#xff0c;解决企业内部文档编辑、知识沉淀、知识协同等痛点。项目主要采用Java开发&#xff0c;基础框架采用JVS&#xff08;spring cloudVue&#xff09;适用…

基于微信小程序的一款小程序版知乎

从零开始开发的一款小程序&#xff0c;所以没有使用任何框架及UI库&#xff0c;记录一下本次开发中踩过的坑吧~展示效果(界面样式设计与交互来自iOS 4.8.0版本知乎App)&#xff1a;项目地址&#xff1a;https://download.csdn.net一、开始前的准备申请账号&#xff1a;根据小程…

钉钉配置事件订阅(Python)

钉钉配置事件订阅 0.需求分析 需要实现钉钉企业通讯录同步至企业微信通讯录&#xff0c;这就需要用到钉钉的事件与回调 1.配置应用 登陆开放平台 https://open-dev.dingtalk.com/去企业内部开发里面&#xff0c;先创建个应用&#xff0c;后面都借用这个应用来调接口 创建完…

自定义分库分表组件(实现分库分表的组件)——java

系列文章目录 文章目录系列文章目录前言一、所需技术二、技术总结1. ThreadLocal2.HashMap三、实现1、定义路由注解自定义注解格式要求元注解&#xff1a; 用于描述注解的注解在程序使用(解析)注解&#xff1a;获取注解中定义的属性值小例子&#xff1a;注解定义一个简单的测试…

AI算法创新赛-人车目标检测竞赛总结03

团队简介AI0000032 团队成员均为从事计算机视觉领域的企业员工&#xff0c;热爱技术&#xff0c;勇于挑战&#xff0c;致力于更通用目标检测算法的研究与落地。团队由三人组成&#xff0c;队长何正海 主要负责整体方案设计与模型的量化工作&#xff0c;余洋主要负责模型训练与调…

YOLOV5输出的txt里面有什么猫腻(用于图像分类竞赛中提升图像信息密度)

背景概括&#xff1a; kaggle最近举办了一场医学乳腺癌检测的比赛&#xff08;图像分类&#xff09; 比赛官网地址 给的数据是dcm的专业的医学格式&#xff0c;自己通过DICOM库转为png后&#xff0c;发现该图像胸部不同的患者乳腺大小不一&#xff0c;简言之乳腺的CT有效图在…

MySQL性能调优与设计——MySQL中的索引

MySQL中的索引 InnoDB存储引擎支持以下几种常见索引&#xff1a;B树索引、全文索引、哈希索引&#xff0c;其中比较关键的是B树索引。 B树索引 InnoDB中的索引自然也是按照B树来组织的&#xff0c;B树的叶子节点用来存放数据。 聚集索引/聚簇索引 InnoDB中使用了聚集索引&…

LeetCode 141. 环形链表

原题链接 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给你一个链表的头节点 headheadhead &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 nextnextnext 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的…

python编写webapi读取mdb数据使用json格式响应客户端请求

想做个自动应答机器人&#xff0c;通过webapi提供服务&#xff0c;原理&#xff1a;判断关键字&#xff0c;到数据库查询相关内容&#xff0c;以json格式反馈给客户端。 1、创建autoreply数据库&#xff0c;创建reply表&#xff0c;表中包含kename&#xff08;短文本&#xff…

积水在线监测仪——积水点、易涝点水位监测设备

一、设备概述 积水在线监测仪是一款用于城市积水点、易涝点等场景的水位监测设备&#xff0c;设备采用电池供电&#xff0c;无需另外供电&#xff0c;安装方便&#xff0c;使用简单。可以时监测水点、易涝点水位情况&#xff0c;当水位数据超过阈值后触发告警上传&#xff0c;…