Java基础之Object类、String类

Java基础

1.Object类

import java.util.Objects;

public class Object01 {
    public static void main(String[] args) throws CloneNotSupportedException{

        /*
            TODO 方法:
                 clone() => 创建并返回此对象的副本 (浅拷贝)
                 equals => 判断两个对象是否相等
                      equals 默认底层使用 == 对两个对象地址进行判断,如果地址相同,那么结果为true
                 hashCode() => 返回对象的Hash值,该函数是一个映射函数  传入一个值,肯定有一个唯一对应的随机的值
                 toString() => 用于将当前对象转换成一个字符串
                 getClass() => 获取当前对象的类路径
         */
        Object object = new Object();
        String objStr = object.toString();
        System.out.println(objStr); // java.lang.Object@4554617c
        System.out.println(object); // java.lang.Object@4554617c  println就是调用了 toString 方法

        String str = new String("这是一个字符串");
        System.out.println(str.toString());  // 子类可以重写toString 方法

        MyClass myClass1 = new MyClass("toString", "这是一个自定义类");
        MyClass myClass2 = new MyClass("toString", "这是一个自定义类");
        System.out.println(myClass1);
        System.out.println(myClass1.equals(myClass2)); // true




        // TODO 在Java中Class也是一个类 该类的对象表示 类对象
        Class aClass = myClass1.getClass();
        System.out.println(aClass.getName().toString()); // 获取当前对象的类路径
        //结果: com.shujia.Day07_Object_StringFunction_WrapClass.MyClass


    }
}

/*
    对于一个自定义类,如果该类用于表述数据 那么其规范的写法:
        比如对于 Mysql中的emp表 每一行数据代表是一个员工类 员工的字段是类中的属性
 */
class MyClass{
    private String name;
    private String data;

    public MyClass(String name, String data) {
        this.name = name;
        this.data = data;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    //equals()方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyClass myClass = (MyClass) o;
        return Objects.equals(name, myClass.name) && Objects.equals(data, myClass.data);
    }

    
    //重写hashCode()方法
    @Override
    public int hashCode() {
        return Objects.hash(name, data);
    }
    /*
       TODO  对于外部获取当前类对象的信息时,一般会调用toString方法
            对于继承的toString方法 不能获取其属性信息  所以需要对其进行重写
     */

    @Override
    public String toString() {
        return "MyClass{" +
                "name='" + name + '\'' +
                ", data='" + data + '\'' +
                '}';
    }
    
}

2.Scanner类

import java.io.InputStream;
import java.util.Scanner;

public class ScannerClass {
    public static void main(String[] args) {
        /*
            TODO Scanner类
         */
        /*
            TODO 想要从控制台获取数据 => System.in
                 in 是 System中的一个属性 类别为 InputStream 称为输入流

         */
        InputStream inputStream = System.in;
        Scanner scanner = new Scanner(inputStream);
        /*
        TODO
            next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、
              Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,
            next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
            nextLine()方法的结束符只是Enter键,
              即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
         */

//        String next = scanner.next();
        String next = scanner.nextLine();
        System.out.println(next+"|");

    }
}

3.String类

public class StringClass {
    public static void main(String[] args) {
        /*
            TODO String类
         */
        String str1 = "String";
        String str2 = "String";
        String newStr = new String("String");
        System.out.println(str1 == str2); // true  => 内存地址一样
        System.out.println(str1 == newStr); // false  => == 用于判断内存地址是否相同 内存地址不一样
        System.out.println(str1.equals(newStr)); // true  => equals是比较具体的数据(String类中的equals()方法经过了重写,判断值是否相等)

        String str3 = "1+1=2";
        String str4 = "1+1=";
        String str5 = "2";
        String str6 = str4 + str5;  // 通过 + 的方式得到的结果,会在堆空间中保存数据
        System.out.println(str3 == str6);  // false str3会存放到栈空间中


    }
}

4.String方法01

public class StringFunction01 {
    public static void main(String[] args) {
        /*
            TODO String类的方法
                1.构造方法
                    new String(char[] chars)
                    new String(byte[] bytes)
                2.判断功能
                    boolean equals(Object obj)  等值判断  // 非常重要
                    boolean equalsIgnoreCase(String str)  // 忽略大小写比较字符串
                    boolean contains(String str) // 是否包含某个子字符串
                    boolean startsWith(String str)  // 判断是否以某个子字符串为开头
                    boolean endsWith(String str) // 判断是否以某个子字符串为结尾
                    boolean isEmpty() //判断字符串是否为空
               3.String类的获取功能
                    int length() => 获取字符长度 // 非常重要
                    char charAt(int index) => 根据下标获取其对应下标位置上的数据 => 因为字符串可以看成是char类型的数组
                    int indexOf(int ch)   indexOf是用于返回其传入 参数(注意参数列表) 在字符串中的下标
                    int indexOf(String str)
                    int indexOf(int ch,int fromIndex)
                    int indexOf(String str,int fromIndex)  fromIndex 表示从某个下标开始寻找
                    String substring(int start)  // 非常重要  从某个开始下标截取字符串直到末尾
                    String substring(int start,int end) // 非常重要 从某个开始下标截取字符串直到结束下标 截取区间为左闭右开区间

         */
        char[] chars = {'a','b','c','d'};
        String char2Str = new String(chars);
        System.out.println(char2Str); // print()方法内部调用了toString()方法,因此可以这样输出

        // TODO 对于字符串来说 认为byte[]中保存的数据是字节数据,在创建对象时,会根据其ASC码值将其转换成对应的字符
        byte[] bytes = {97,98,99};
        System.out.println(new String(bytes));  // abc


        String str = "ABCD";
        System.out.println(char2Str.equalsIgnoreCase(str));  // true

        System.out.println(char2Str.contains("a")); // true

        System.out.println(str.startsWith("AB")); // true

        System.out.println(str.endsWith("CD")); // true

        System.out.println(str.isEmpty()); //

        // 对字符串赋予 null 值之后,使得其指向的内地址消失 所以调用时会出现空指针异常
//        String nullStr = null;
        //注:null与""是两个概念,isEmpty()输出不同
        String emptyStr = "";
//        System.out.println(nullStr.isEmpty()); // java.lang.NullPointerException
        System.out.println(emptyStr.isEmpty()); // true

        System.out.println(str.length()); // 4
        System.out.println(str.charAt(0));

        System.out.println(str.indexOf("BC")); // 1 返回的是第一个字符的下标

        String str2 = "ABCDABCD";
        System.out.println(str2.indexOf("BC",2)); // 5 从第二个字符开始查找,并返回下标

        System.out.println(str2.substring(2)); // CDABCD
        System.out.println(str2.substring(2,6));  // CDAB

    }
}

5.String方法02

import java.util.Arrays;

public class Demo05StringFunction2 {
    public static void main(String[] args) {
        /*
            TODO 字符串方法
                转换功能
                byte[] getBytes()  (若无参数)表示使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
                char[] toCharArray() 将字符串中的字符转换为字符数组
                static String valueOf(char[] chs) 将 char 数组 data 转换成字符串
                static String valueOf(int i) 将 int 变量 i 转换成字符串
                String toLowerCase() 将字符串中字符转换成大写
                String toUpperCase() 将字符串中字符转换成小写
                String concat(String str) 用于将指定的字符串参数连接到字符串上
         */

        String str = "abcd";
        byte[] bytes = str.getBytes();
        System.out.println(Arrays.toString(bytes)); // [97, 98, 99, 100]

        /*TODO
            注:对于一个中文默认占用三个字节数据
         */
        String str2 = "字符串"; // => [-27, -83, -105, -25, -84, -90, -28, -72, -78]
        System.out.println(Arrays.toString(str2.getBytes()));

        /*TODO
            注:对于一个中文默认占用一个字符数据
        */
        char[] chars = str2.toCharArray();
        System.out.println(Arrays.toString(chars));
        System.out.println(str.toCharArray());

        char[] chars2 = {'数','组'};
        /* TODO:
            String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
            String.valueOf(char[] data, int offset, int count) :
            将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串
         */
        String char2Str = String.valueOf(chars2);
        System.out.println(char2Str);

        System.out.println(str.toUpperCase());
        System.out.println(str.toUpperCase().toLowerCase());

        // 如何将hello转换成Hello
        String hello = "helLo"; // => Hello
        String takeStr = hello.substring(1).toLowerCase();
//        String headStr = hello.substring(0, 1).toUpperCase();
        String headStr = String.valueOf(hello.charAt(0)).toUpperCase();
        System.out.println(headStr+takeStr);

        String str3 = "head";
        String str4 = "tail";
        System.out.println(str3+","+str4);
        System.out.println(str3.concat(",").concat(str4));


    }
}

6.String方法03

package com.shujia.Day07_Object_StringFunction_WrapClass;

import java.util.Arrays;

public class Demo06StringFunction3 {
    public static void main(String[] args) {
        /*
          TODO  String类的其他功能
                String replace(char old,char new)
                String replace(String old,String new) // 非常重要
                String trim()  去除前后空格信息
                字典顺序比较:(字典顺序指的是ASCII码表中的字符顺序。ASCII表中每个字符都有对应的下标,从0开始升序排列,共128个字符。)
                int compareTo(String str):
                  用字符串1跟字符串2作比较(字符串1.compareTo(字符串2)),如果字符串1的字典顺序在字符串2前面,
                   则返回一个正数。若在后面,则返回一个负数。若两个字符串的字典顺序相同,则返回0。
                   特殊案例:
                   String str1 = "ljj";
                   String str2 = "ljjLovexql";
                   System.out.println(str1.compareTo(str2));
                   以上代码运行结果为 -7,str1比str2少7个字符,所以返回 -7
                int compareToIgnoreCase(String str) 方法用于按字典顺序比较两个字符串,不考虑大小写
                注意:对于String中修改数据的函数,不会对String本身进行修改,会返回一个新的String对象
         */
        String str = "123 456";
        System.out.println(str.replace(" ", ","));
        System.out.println(str);

        String str1 = "  今天天气真好呀  \t";
        System.out.println(str1);
        System.out.println(str1.trim()+"|");

        // 对于数值数据进行排序时,是按照自然排序方式
        int[] ints = {11,10,100};
        Arrays.sort(ints);
        System.out.println(Arrays.toString(ints));  // [10, 11, 100]

        // 对于字符串类型数据进行比较时,是按照字典顺序进行比较的
        String strArr[] = {"11","10","100"};
        Arrays.sort(strArr);
        System.out.println(Arrays.toString(strArr)); // [10, 100, 11]

        String intStr1 = "11";
        String intStr2 = "100";
        int compareToRes = intStr1.compareTo(intStr2);  // 1
        System.out.println(compareToRes);



        /*
            value?
            private final char value[];  => 11
            value = ['1','1']

            public int compareTo(String anotherString) {
                int len1 = value.length;  ['1','1'] => 2
                int len2 = anotherString.value.length; ['1','0','0'] => 3
                int lim = Math.min(len1, len2); // 取长度最小值 2
                char v1[] = value;  ['1','1']
                char v2[] = anotherString.value; ['1','0','0']

                int k = 0; // 下标
                while (k < lim) {
                    // 取出对应下标中的字符
                    char c1 = v1[k];
                    char c2 = v2[k];
                    // k=1 => c1=1,c2=0
                    if (c1 != c2) {
                        // 将两个char类型的数据通过ASC码值进行比较 返回其差值
                        // c1表示当前字符串  c2表示传入比较的字符串
                        return c1 - c2;
                    }
                    k++;
                }
                return len1 - len2;
            }
         */

        //实现字符串abc的逆序输出
        String str4 = "abc";
        String res = "";
        char[] chars = str4.toCharArray();
        for (int i = chars.length-1; i >= 0 ; i--) {
            res += chars[i];
        }
        System.out.println(res);



        //从下方字符串中匹配”java“的数量
        String javaStr = "oaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
         //TODO 法一:
        //        int num = 0;
    //        for (int i = 0; i < javaStr.length(); i++) {
    //            if (i + 4 < javaStr.length()){
    //                String substring = javaStr.substring(i, i + 4);
    //                if (substring.equals("java")) {
    //                    num ++;
    //                }
    //            }
    //        }
    //        System.out.println("num:"+num);

        int num = 0;
        // TODO 法二:
       //        while (javaStr.contains("java")){
//            返回下标
//            int javaStartIndex = javaStr.indexOf("java");
//            进行javaStartIndex+4,越过此次找到的“java”来进行下一次的查找
//            javaStr = javaStr.substring(javaStartIndex+4);
//            num ++;
       //        }
       //        System.out.println("num:"+num);

        // TODO 法三(相对于法二进行了优化): indexOf当获取不到值对应返回结果为 -1
        //        javaStr = "hello";
        //        System.out.println(javaStr.indexOf("java"));

        int javaStartIndex = 0;
        while ((javaStartIndex = javaStr.indexOf("java")) != -1){
            javaStr = javaStr.substring(javaStartIndex+4);
            num ++;
        }
        System.out.println("num:"+num);

        // 当前String类型的字符长度是不可更改的 => 字符串底层做数据存储是 char[] 定义后长度不可发生变化
        String st = "a";
        String b = st.concat("b");
        System.out.println(b);


    }
}

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

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

相关文章

Visual Studio2022中使用水晶报表

1.创建水晶报表项目 选择需要的表 自动生成连接 选项&#xff1a;可跳过 后续还有一些 都能跳过 看你自己的需求 自己选的样式 自动生成 查看你的数据源&#xff0c;在选择数据集时已经有啦 不懂得可以看上集 字段可以直接拖&#xff0c;页面上的都是初始化选过的 点击生成 成功…

【系统架构师】-选择题(一)

1、信息系统规划方法中&#xff0c;关键成功因素法通过对关键成功因素的识别&#xff0c;找出实现目标所需要的关键信息集合&#xff0c;从而确定系统开发的 &#xff08;优先次序&#xff09; 。关键成功因素来源于组织的目标&#xff0c;通过组织的目标分解和关键成功因素识别…

docker容器内彻底移除iptables服务的实现方法

背景 我创建的容器使用的是centos6的标准镜像&#xff0c;所以内置了iptables服务。容器启动后iptables服务默认就启动了。iptables设置的规则默认是所有流量都无法通行。而对于服务器的管理使用的是宿主机的防火墙。这样就导致在实现用iptables动态给容器添加端口映射时不成功…

关于C++STL的总结(基础使用和底层原理)

STL是什么&#xff1f; STL即&#xff08;Standard Template Library&#xff09;标准模板库&#xff0c;提供了常见的数据结构和算法函数等&#xff0c;其下共包含六大组件&#xff1a; 容器算法迭代器仿函数适配器空间配置器 本篇重点介绍容器的使用和简单的底层实现原理&…

推荐六款图片编辑软件

图片编辑、抠图、拼图、压缩、放大、加字体、转格式等各种功能应有尽有&#xff0c;收藏这一篇就够了&#xff01; 综合编辑&#xff1a;图片编辑助手 这是一款电脑软件&#xff0c;里面有超多图片处理功能&#xff0c;压缩图片到指定大小、消除任意位置的图片水印、按指定大小…

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构&#xff1a;二、vector类的实现&#xff1a;1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…

如何在PostgreSQL中设置自动清理过期数据的策略

文章目录 方法一&#xff1a;使用临时表和定期清理步骤&#xff1a;示例代码&#xff1a;创建临时表&#xff1a;定期清理脚本&#xff08;bash psql&#xff09;&#xff1a; 方法二&#xff1a;使用分区表和定期清理步骤&#xff1a;示例代码&#xff1a;创建分区表&#xf…

《内向者优势》:不要低估一个内向的人

#世界读书日 作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤…

Redis篇:缓存更新策略最佳实践

前景&#xff1a; 缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合适&a…

Vue3的监听属性watch和计算属性computed

监听属性watch 计算属性computed 一、监听属性watch watch 的第一个参数可以是不同形式的“数据源&#xff0c;watch 可以监听以下几种数据&#xff1a; 一个 ref (包括计算属性)、 一个响应式对象、 一个 getter 函数、 或多个数据源组成的数组 watch 的参数:监视的回调&…

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

860. 柠檬水找零 思路&#xff1a; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 有如下三种情况&#xff1a; 情况一&#xff1a;账单是5&#xff0c;直接收下。情况二&#xff1a;账单是10&#xff0c;消耗一个5&#xff0c;增加一个10情况三&#xff1a;…

好友关注-实现分页查询收邮箱

9.5好友关注-实现分页查询收邮箱 需求&#xff1a;在个人主页的“关注”卡片中&#xff0c;查询并展示推送的Blog信息&#xff1a; 具体操作如下&#xff1a; 1、每次查询完成后&#xff0c;我们要分析出查询出数据的最小时间戳&#xff0c;这个值会作为下一次查询的条件 2…

考研党打印资料怎么使用云打印服务?

对于准备考研的同学们来说&#xff0c;在备考的时候需要准备许多资料&#xff0c;这些资料的打印费用成为了考研党的巨额支出。那么在生活费有限的情况下&#xff0c;考研党打印资料最好是选择云打印服务&#xff0c;因为易绘创云打印服务低至5分钱/页还包邮。那么考研党打印资…

Pytest精通指南(28)钩子函数-测试报告(pytest-html)

文章目录 前言应用场景插件安装参数分析使用方法拓展-定制化报告 前言 在软件开发过程中&#xff0c;测试是确保代码质量的关键环节。 而测试报告则是测试过程中不可或缺的输出物&#xff0c;它为我们提供了关于测试用例执行情况的详细信息&#xff0c;帮助我们快速定位和解决问…

服务器(AIX、Linux、UNIX)性能监视器工具【nmon】使用介绍

目录 ■nmon简介 1.安装 2.使用简介 3.使用&#xff08;具体使用的例子【CPU】【内存】&#xff09; 4.采集数据 5.查看log&#xff08;根据结果&#xff0c;生成报表&#xff09; 6.分析结果 ■nmon简介 nmon&#xff08;"Nigels performance Monitor"&…

比特币成长的代价

作者&#xff1a;Jeffrey Tucker&#xff0c;作家和总裁。曾就经济、技术、社会哲学和文化等话题广泛发表演讲。编译&#xff1a;秦晋 2017 年之后参与比特币市场的人遇到了与之前的人不同的操作和理想。如今&#xff0c;没有人会太在意之前的事情&#xff0c;说的是 2010-2016…

SL3038 耐压150V恒压芯片 60V降24V 72V降12V降压IC

SL3038 是一款恒压芯片&#xff0c;其耐压值为 150V。这意味着它可以在高达 150V 的电压下工作而不会损坏。现在&#xff0c;让我们来讨论您提到的两个降压应用&#xff1a;从 60V 降到 24V 和从 72V 降到 12V。 1. 60V 降到 24V&#xff1a; 输入电压&#xff1a;60V 输出电…

02 IO口的操作

文章目录 前言一、IO的概念1.IO接口2.IO端口 二、CPU和外设进行数据传输的方法1.程序控制方式1.1 无条件1.2 查询方式 2.中断方式3.DMA方式 一、方法介绍和代码编写1.前置知识2.程序方式1.1 无条件方式1.1.1 打开对应的GPIO口1.1.2 初始化对应的GPIO引脚1.1.2.1 推挽输出1.1.2.…

【Hadoop】-Hive部署[12]

目录 思考 VMware虚拟机部署 规划 步骤1&#xff1a;安装MySQL数据库 步骤2&#xff1a;配置Hadoop 步骤3&#xff1a;下载解压Hive 步骤4&#xff1a;提供MySQL Driver包 步骤5&#xff1a;配置Hive 步骤6&#xff1a;初始化元数据库 步骤7&#xff1a;启动Hive&…

TDSQL同一个所属Set显示3个备份节点

欢迎关注“数据库运维之道”公众号&#xff0c;一起学习数据库技术! 本期将为大家分享《TDSQL同一个所属Set显示3个备份节点》的处置案例。 关键词&#xff1a;分布式数据库、TDSQL、备份节点 1、问题描述 登录赤兔管理平台&#xff0c;单击左侧导航栏“实例管理/集群管理”…