Java基础——根类与String类

2023-10-30

转眼间我们已经工作完一周了,这周开始阿Q要不定时更新知识了,先让我们来学习一下java中的Object与string类吧。

Object类

API:Application Programming Interface 应用程序编程接口,Java API就是Java提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。

Object:所有类都直接或者间接的继承自Object类,是类层次结构的根类。
public int hashCode()

  1. 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
  2. 不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。

代码:

	public static void main(String[] args) {
		Object object = new Object();
		int hashCode = object.hashCode();
		System.out.println(hashCode);		//26171428

		Student s1 = new Student("张三", 23);
		Student s2 = new Student("李四", 24);
		Student s3 = s1;
			
		System.out.println(s1.hashCode());	//6330655
		System.out.println(s2.hashCode());	//31782850
		System.out.println(s3.hashCode());	//6330655  与s1的hashCode值相同
	}

public final Class getClass():此方法被final修饰表示不能被重写。此方法返回此 Object 的运行时类对象,也就是Class类的一个对象,此对象用来描述类的class文件。

public static void main(String[] args) {
	Student s = new Student("张三", 23);//创建Student对象 s
    //s对象调用getClass()返回一个描述Student类的class文件的对象,也就是Class类的对象
	Class clazz = s.getClass();		
    //clazz对象调用 Class类的getName() 返回一个String类型,类的全路径名
	String name = clazz.getName();
	System.out.println(name);	
    Student s1 = new Student();	//新创建了一个s1对象 
    //s1对象调用getClass() 返回一个描述Student类的class文件的对象,也就是Class类的对象
	Class clazz1 = s1.getClass();		
    //因为clazz和clazz1都是描述Student类的class文件的对象 所以他俩是同一个对象
	System.out.println(clazz == clazz1);	
}

Object的toString()

  1. 我们在打印一个对象的时候,默认调用的是对象的toString方法,如果该对象没有重写toString(),那么调用的是Object的toString()方法,因为继承了Object嘛;

  2. Object的toString方法返回类的全路径名称 + @ + 16进制哈希值, 这样返回一般没有意义;

    Object类中toString()的源码

    public Stirng toString() {
    	return  getClass().getName() + "@" + Integer.toHexString(hashCode()) 
    }
    
  3. 我们一般在编写类的时候都重写Object的toString(),一般要求是把类里面的属性都显示出来;

代码:

public class Student {
	String name;
	int age;
	public Student(String name, int age){
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
}
public static void main(String[] args) {
	Student s = new Student("张三", 23);
	System.out.println(s);		//这句话就相当于 System.out.println(s.toString());
}

Object的equals()

  1. Object中equals方法的源码

    public boolean equals(Object obj){
    	return (this == obj);
    }
    
  2. 比较的引用类型的地址值,开发中我们调用equals方法是想比较对象里面的属性值,所以在编写类的时候一般重写Object中的equals方法,让其比较对象的属性值。

    代码:

public class Student {
   String name;
   int age;
   public Student(String name, int age){
       this.name = name;
       this.age = age;
   }
   //重写equals方法
   //参数必须是Object,因为重写Object的方法,方法体必须和Object的equals方法一模一样
   @Override
   public boolean equals(Object obj) {		
       Student s = (Student)obj;//因为obj不能调用Student特有的内容,所以向下转型
       return this.name.equals(s.name) &&this.age == s.age;						    	//this.name.equals(s.name) 这儿的equals方法是String类重写Object后的equals方法
   	}
  }
  public static void main(String[] args) {
      Student s1 =  new Student("张三", 23);
      Student s2 =  new Student("张三", 23);
      boolean b = s1.equals(s2);   		//比较2个对象属性是否相同
      System.out.println(s1 == s2);		//false 比较的是两个对象的地址值是否相同
      System.out.println(b);			//true
   }
==号和equals方法的区别
  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值;
  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。

Scanner

  • hasNextInt():判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
  • nextInt(): 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符。
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);		//创建键盘录入对象
		if(sc.hasNextInt()) {				//判断键盘录入的是否是int类型的数据
			int i = sc.nextInt();			//键盘录入的数据存储在i中
			System.out.println(i);
		}else {
			System.out.println("输入的类型错误");
		}
	}

bug问题:先用nextInt()接收int类型,再用nextLine()接收字符串的时候,会导致nextLine() 直接把回车接收到了, nextLine 不能继续接收字符串了。

  1. 先获取一个数值后,再创建一个新的键盘录入对象获取字符串。
  2. 把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
String类

构造方法

	String s = "abc";  s就是String的一个对象
	public String():空构造
	public String(byte[] bytes):把字节数组转成字符串
	public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
	public String(char[] value):把字符数组转成字符串
	public String(char[] value,int index,int count):把字符数组的一部分转成字符串
	public String(String original):把字符串常量值转成字符串

代码:

	public static void main(String[] args) {
		String s = "abc";
		System.out.println(s1);			//打印出:abc
		
		String s1 = new String();
		System.out.println(s1);			//s1是个空串
		
		byte[] arr1 = {97,98,99};		
		String s2 = new String(arr1);	//解码,将计算机读的懂的转换成我们读的懂
		System.out.println(s2);			//打印出:abc
		
		byte[] arr2 = {97,98,99,100,101,102};
		String s3 = new String(arr2,2,3);	//将arr2字节数组从2索引开始转换3个
		System.out.println(s3);			//打印出:cde
		
		char[] arr3 = {'a','b','c','d','e'};	//将字符数组转换成字符串
		String s4 = new String(arr3);
		System.out.println(s4);			//打印出:abdcde
		
		String s5 = new String(arr3,1,3);	//将arr3字符数组,从1索引开始转换3个
		System.out.println(s5);			//打印出:bcd
		
		String s6 = new String("heima");
		System.out.println(s6);			//打印出 :heima
	}

String的判断功能

  • boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
  • boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
  • boolean contains(String str):判断大字符串中是否包含小字符串
  • boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
  • boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
  • boolean isEmpty():判断字符串是否为空

String的获取功能

  • int length():获取字符串的长度。
  • char charAt(int index):获取指定索引位置的字符
  • int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
  • int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
  • int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
  • int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
  • int lastIndexOf(int ch):从最后往前数返回指定字符在此字符串中第一次出现处的索引。
  • int lastIndexOf(String str):从最后往前数返返回指定字符串在此字符串中第一次出现处的索引。
  • int lastIndexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置往前数第一次出现处的索引。
  • int lastIndexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置往前数第一次出现处的索引。
  • String substring(int start):从指定位置开始截取字符串,默认到末尾。
  • String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

String的转换功能

  • byte[] getBytes():把字符串转换为字节数组。

  • char[] toCharArray():把字符串转换为字符数组。

  • static String valueOf(char[] chs):把字符数组转成字符串。

  • static String valueOf(int i):把int类型的数据转成字符串。

    注意:String类的valueOf方法可以把任意类型的数据转成字符串。

  • String toLowerCase():把字符串转成小写。

  • String toUpperCase():把字符串转成大写。

  • String concat(String str):把字符串拼接。

String的其他功能

  • String replace(char old,char new): 把一个字符串中的所有old字符用new字符替换
  • String replace(String old,String new):把一个字符串中的所有old小串用new新串替换
  • String trim():去掉两端的空格
  • int compareTo(String str):按照字典顺序比较字符串(暂时不用掌握)
  • int compareToIgnoreCase(String str):不区分大小写的按照字典顺序比较字符串(了解)

String和字符数组的转换

  • String --> char[]==>toCharArray();

  • char[] --> String

    ==> new String(char[] chs);

    ==> static String valueOf(char[] chs);

String和字节数组的转换

  • String --> byte[]==>getBytes();
  • byte[] -->String==>new String(byte[] bys);

String类的知识就先讲到这里了,想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础——根类与String类 的相关文章

  • 今天发现rabbitMQ消息堆积

    发现有三十多万的消息堆积在10的queue里没有被消费 记录一下查看问题的步骤 1 jps 找出程序的PID 2 jstack PID 查看线程dump 发现rabbitMQ的consumer worker线程block住了 Thread
  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • 必须掌握的hashcode()方法

    一 hashcode是什么 1 hash和hash表是什么 想要知道这个hashcode 首先得知道hash 通过百度百科看一下 hash是一个函数 该函数中的实现就是一种算法 就是通过一系列的算法来得到一个hash值 这个时候 我们就需要
  • JVM工具-jstack

    jstack 打印线程堆栈信息 支持支持本地java进程 core文件以及远程java进程 命令格式 jstack options pid jstack options executable core jstack options serv
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • 什么是多态?对于多态的理解....

    什么是多态 我们都知道面向对象有四个基本特性 抽象 封装 继承 多态 概括可以理解为 抽象 封装 继承 是多态的基础 多态是抽象 封装 继承的表现 多态 是Java中非常重要的一部分 简单理解 不同类的 对象 对同一消息 做出了不同的响应就
  • mysql如何一秒插入10万条数据

    当我们需要批量插入或者更新记录时 可以采用Java的批量更新机制 该机制允许多条语句甚至一次性提交给数据库处理 通常情况下比一句一提交处理更有效率 jdbc处理批量提交有三个方法 需要注意的是 这三种方法都要和PreparedStateme
  • 动力节点老杜java基础视频笔记第一章 学前准备 (1)

    课堂截图 为什么使用截图工具 在听课的过程中 有的时候老师操作的比较快 通过截图的方式将老师的操作保存下来 以便后期的操作 另外截图之后的图片也可以用于笔记的记录 在笔记当中最好采用图文并茂的方式 这样更加利于知识的回顾 使用哪个截图工具
  • 接口如何实现多态

    抽象类是用来继承的 不能被实例化 抽象类里可以有成员变量 接口中没有 1 抽象类里的抽象方法 只有在子类实现了才能使用 2 抽象类里的普通方法 可被子类调用 3 接口里的方法 都被默认修饰为public abstract类型 4 接口里的变
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • 一文彻底弄懂零拷贝原理

    零拷贝 零拷贝 Zero Copy 是一种 I O 操作优化技术 可以快速高效地将数据从文件系统移动到网络接口 而不需要将其从内核空间复制到用户空间 其在 FTP 或者 HTTP 等协议中可以显著地提升性能 但是需要注意的是 并不是所有的操
  • 各种注释总结

    jsp注释 html注释
  • 《编写高质量代码:改善Java程序的151个建议》读书笔记

    编写高质量代码 改善Java程序的151个建议 秦小波 67个笔记 前言 本书附带有大量的源码 下载地址见华章网站www hzbook com 建议11 养成良好习惯 显式声明UID SerialVersionUID 也叫做流标识符 Str
  • java 模拟库存管理系统

    本案例要求编写一个程序 模拟库存管理系统 该系统内容主要包括 商品入库 商品显示 和删除商品功能 此程序用手机举例 此管理系统分别为两个类Phone 和Test类 Phone类 确定四个变量 类 1 生成空参数构造方法 2 全部参数的构造方
  • IDEA 编写JDBC 第一个示例

    知心惟有雕梁燕 自来相伴 东风不管琵琶怨 落花吹遍 一 新建一个Module 二 在此Module下新建一个包 在包再建一个包 命名为lib 三 导入mysql驱动 四 将mysql驱动添加到项目的库里 五 代码实现 package Con
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • 将list集合的元素按照添加顺序的倒序进行排列取出

    将list集合的元素按照添加顺序的倒序进行排列取出 方法1 list add 0 object List
  • Java处理SSH-免密登录

    前提 需要测试主机之间能够免密 配置ssh请自行百度 jar包 旧版 com jcraft jsch 仅支持老版的密钥格式 旧版本 RSA
  • 黑豹程序员-字符串中查找出重复的字符串

    Collections frequency codeList element 字符串element 在codeList集合中重复的次数 List

随机推荐

  • 《Flowable基础二 Flowable是什么》

    2 1 Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎 Flowable流程引擎让你可以部署BPMN 2 0流程定义 用于定义流程的行业XML标准 创建这些流程定义的流程实例 进行查询 访问运行中或历史的
  • js中事件对象event

    一 Event对象 Event 对象代表事件的状态 比如事件在其中发生的元素 键盘按键的状态 鼠标的位置 鼠标按钮的状态 事件通常与函数结合使用 函数不会在事件发生前被执行 当一个事件发生的时候 和当前这个对象发生的这个事件有关的一些详细信
  • JqGrid完整例子,学习linux的书籍

    2 JavaScript function fn jqGridTypeDefine function options 获取jquery对象 var grid selector this var initDate oper height wi
  • Qt 使用emit 链接失败:error LNK2019: unresolved external symbol

    编写一个类ChartView 发送信号signals 编译失败 1 gt chartview obj error LNK2019 unresolved external symbol public void cdecl ChartView
  • Android APP 自动更新实现(适用Android9.0)

    Android App自动更新基本上是每个App都需具备的功能 参考网上各种资料 自己整理了下 先来看看大致的界面 一 实现思路 1 发布Android App时 都会生成output metadata json文件和对应的apk文件 不知
  • 爆肝整理,银行金融项目测试+常问面试题(附答案)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • CTF.show:萌新:web9

    题目要求我们利用 system exec highlight才能执行ev
  • 使用Chrony的Raspberry Pi

    chrony是网络时间协议 NTP 的实现 它替代了ntpd 后者是NTP 的参考实现 与NTPsec不同 chrony是从零开始实现的 它被设计为即使在诸如间歇性网络连接 例如笔记本电脑 和拥塞网络之类的困难条件下也可以同步时间 与ntp
  • 数据挖掘——无监督学习

    一 概述 无监督学习算法 让计算机自己学习 没有属性或者标签 有监督学习算法 每个样本都已经被标明 我们已经被告知了学习的答案 无监督学习的典型算法是聚类算法和降维 二 聚类算法 1 概念 聚类分析 将数据对象分组成为多个蔟 同一簇中的对象
  • [VMware]解决"已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作"的问题

    创建好空的虚拟机后使用ISO镜像文件后重启进行安装系统 出现下图问题 原因 是BIOS未开启虚拟化技术 之前个人用的电脑是默认开启了 现在换到公司联想的电脑上安装虚拟机发现了这个问题 解决方式 虚拟化技术目前主要依赖于电脑的CPU型号及BI
  • wireshark 本地连接无数据 抓不到网卡解决方法

    问题描述 环境 win7 wireshark 3 4 6 不知道我之前做了啥 突然wireshark抓不到数据了 过滤的网卡选择哪个接口都不行 捕获选项如下图 做过以下尝试都不行 在cmd中打开抓包服务 net start npf 软件卸载
  • arm64-v8a编译

    环境 Ubuntu64和android ndk r11c 其他不支持arm64 v8a架构 重点 依赖库要使用android ndk r11c编译成arm64 v8a 其中ffmpeg最复杂 编译方法如下 1 ffmpeg编译 目录建立 创
  • 线程池源码(一)

    一 ThreadPoolExecutor执行流程 二 ThreadPoolExecutor状态 线程池中核心属性 ctl ctl本质就是一个int类型的数值 private final AtomicInteger ctl new Atomi
  • 【Python VTK】读取二维序列医学图像分割结果并进行三维重建

    一 问题描述 最近在开发过程中遇到了这样的问题 在医学图像开发过程中 我们将医学图像通过深度学习算法进行分割 现在想要通过这一套二维图像进行三维重构 以下是分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核磁图像分割结果 图一 前列腺核
  • 73-C语言-计算闹钟的时间

    问题 已知现在的小时和分钟 即几点几分 并想要睡觉的时间 单位为min 求闹钟应在几点响 思路 先输入现在准备睡觉的几点几分 以及睡觉的总时长 在看问题最后求的是什么 是到时候 闹钟几点响 而闹钟的设置 先看范围 小时不能超过24小时 分钟
  • Counterfactual Zero-Shot and Open-Set Visual Recognition (CVPR2021)

    这是南洋理工张含望老师组的作品 这篇文章从因果推理出发 来根据反事实推断设计模型 出发点非常的新颖 但不容易懂 因果推理理论是一个非常不错的帮助人换角度看问题的理论工具 多多学习 文章全名叫 Counterfactual Zero Shot
  • Linux的视窗系统总结:初认识《一》

    X window Wayland DirectFB linuxfb的区别 在QT中 真正关心硬件操作的是图形引擎层 图形引擎实现方式在linux上有多个 1 通过X11 2 DFB directFB 3 LinuxFB 其中桌面PC的QT版
  • Django中的Cookie与Session

    Cookie 设置cookie 使用response对象set cookie 获取cookie 用request对象 测试 成功获取到了上一步所添加的cookie Session 一般做项目的时候Session会存到redis中 djang
  • matlab实现简单清浊音检测

    清浊音检测原理公式 清浊音检测是在一段语音信号中区分出清音段 浊音段和静音段 原理框图如下所示 1 过零率 2 对数能量 3 单位延迟自相关系数归一化 4 lpc系数 使用Leveson Durbin算法求得 取 a2 a3 aM的值即为L
  • Java基础——根类与String类

    转眼间我们已经工作完一周了 这周开始阿Q要不定时更新知识了 先让我们来学习一下java中的Object与string类吧 Object类 API Application Programming Interface 应用程序编程接口 Java