当前位置: 首页 > news >正文

day18_常用API之String类丶Object类

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);//truechar[] 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);//javaString 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("厉害")); // trueSystem.out.println(name3.contains("不厉害")); // false// 8、public boolean startsWith(String prefix)System.out.println(name3.startsWith("T")); //trueSystem.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;@Overridepublic 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.StringObject 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());//2112System.out.println("BB".hashCode());//2112System.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;@Overridepublic 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.lryc.cn/news/9173.html

相关文章:

  • OSG三维渲染引擎编程学习之五十五:“第五章:OSG场景渲染” 之 “5.13 一维纹理”
  • RTOS随笔之FreeRTOS启动与同步方法
  • 【AI/NLP】InstructGPT数据标注问题
  • 三次握手和四次挥手
  • Jmeter常用断言之响应断言详解
  • 【Python学习笔记】36.Python3 MySQL - mysql-connector 驱动(1)
  • 计算机SCI论文课题设计需要注意什么? - 易智编译EaseEditing
  • Quartz入门教程
  • TypeScript 学习之 function
  • 【云计算自学路线】
  • code01 v2黑屏、花屏、死机、断电重启、休眠死机的进来
  • 分享107个HTML电子商务模板,总有一款适合您
  • Barra模型因子的构建及应用系列三之Momentum因子
  • 8.2.1.3 索引合并优化
  • 水雨情在线小能手-雨量水位报警站
  • 【蓝桥杯集训4】双指针专题(6 / 6)
  • 文件流,gzip解压,压缩
  • 在线开会,来开开圆桌会议吧~
  • 使用营销自动化的 7 大主要优势
  • 【图像分类】基于PyTorch搭建GRU实现MNIST手写数字体识别(单/双向GRU,附完整代码和数据集)
  • day14_oop_抽象_接口
  • 模式识别 | MATLAB实现DNN深度神经网络模式分类识别
  • 【C++】类和对象三大特性--继承
  • MySQL的存储引擎
  • 工程项目管理系统源码-简洁+好用+全面-工程项目管理系统
  • 什么是STAR原则?
  • 前置知识-初值问题、显式隐式龙格库塔方法、Butcher阵列
  • PythonWeb Django PostgreSQL创建Web项目(二)
  • Python学习笔记:使用字符串
  • echarts饼图封装