Java学习(14)--Object 类/String 类
一、Object 类
(1) Object 是类层次结构的根类,所有的类都直接或者间接的继承自 Object 类。
(2) Object 类的构造方法有一个,并且是无参构造。这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造
(3)要掌握的方法: A:toString()
返回对象的字符串表示,默认是由类的全路径 +'@'+ 哈希值的十六进制表示。这个表示其实是没有意义的,一般子类都会重写该方法。
B:equals()
比较两个对象是否相同。默认情况下,比较的是地址值是否相同。而比较地址值是没有意义的,所以,一般子类也会重写该方法。
(4) 要 了 解 的 方 法 :
A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。
B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解
C:finalize() 用于垃圾回收,在不确定的时间
D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。 (5)注意问题;
A:直接输出一个对象名称,其实默认调用了该对象的 toString() 方法。
B:面试题
==和 equals() 的区别 ?
A:==
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
B:equals()
只能比较引用类型。默认情况下,比较的是地址值是否相同。但是,我们可以根据自己的需要重写该方法。
= 表示地址相同(因为值相同),== 看地址,故ture ,equals 看值,故 ture
new 则说明地址不同,== 看地址,故false ,equals 看值,故 ture
二、String 类
(1)概述:多个字符组成的一串数据。其实它可以和字符数组进行相互转换。
(2)构造方法:
A:public String()
B:public String(byte[] bytes)
C:public String(byte[] bytes,int offset,int length)
D:public String(char[] value)
E:public String(char[] value,int offset,int count)
F:public String(String original)
下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
G:String s = "hello";
输出:java
(3)字符串的特点
A:字符串一旦被赋值,就不能改变。
注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
B:字面值作为字符串对象和通过构造方法创建对象的不同
String s = new String("hello"); 和 String s = "hello" 的区别 ?
String s = new String(“hello”)会创建2(1)个对象,String s = “hello”创建1(0)个对象。
注:当字符串常量池中有对象hello时括号内成立!
(4)字符串的面试题
(看程序写结)
A:==和 equals()
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);// false
System.out.println(s3.equals(s4));// true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);// true
System.out.println(s5.equals(s6));// true
B:字符串的拼接
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);// false
System.out.println(s3.equals((s1 + s2)));// true
System.out.println(s3 == "hello" + "world");
// true
System.out.println(s3.equals("hello" + "world"));// true
(5)字符串的功能
A:判断功能
boolean equals(Object obj) 判断两个字符串是否相等(值相同即可)
boolean equalsIgnoreCase(String str) (忽略大小写)判断两个字符串是否相等
boolean contains(String str) 判断字符串中是否包含指定字符串
boolean startsWith(String str) 判断是否以指定字符串开头
boolean endsWith(String str) 判断是否以指定字符串结尾
boolean isEmpty() 判断字符串是否为空(字符串为 null 会报错)
boolean matches(String regex) ;// 是否匹配正则表达式
B:获取功能
int length() 获取字符串长度
char charAt(int index) 获取索引处的字符
int indexOf(int char) 获取某指定字符在字符串中第一次出现的索引,没有找到则返回 -1
int indexOf(String str) 获取某指定字符串在字符串中第一次出现的索引,没有找到则返回 -1
int indexOf(int ch,int fromIndex) 从指定索引处开始查找某个字符所在字符串的下标
int indexOf(String str,int fromIndex) 从指定索引处开始查找某个字符串所在字符串的下标
String substring(int start) 从指定索引处截取字符串,获取字串
String substring(int start,int end) 左闭右开 从指定索引处截取字符串,获取字串
C:转换功能
byte[] getBytes() 将字符串转换为字节数组
char[] toCharArray() 将字符串转换为字符数组
static String valueOf(char[] chs) 将 char 类型数据转换为 String 数组
static String valueOf(int i) 将 int 类型数据转换为 String 数组
输出:1002
String toLowerCase() 将字符串里面的大写转换成小写
String toUpperCase() 将字符串里面的小写转换成大写
String concat(String str) 将指定字符拼接到字符串后面(效果等同于 + )
D:其他功能
a:替换功能
String replace(char old,char new) 字符替换
String replace(String old,String new) 字符串替换
b: 去空格功能
String trim() 去除字符串两端空格(中间空格去不掉)
c:按字典比较字符串大小
int compareTo(String str) 比较两个字符串 正数则调用方法字符串大,0则相等
int compareToIgnoreCase(String str) 比较两个字符串(忽略大小写)
负数,故s 比 s1 要小
第一个数和第一个数比...第 n 个数和第 n 个数相比(相等则继续向下一位比较)
示例1:
int[] arr ={1,2,3}; 输出结果:[1,2,3]
示例2:
字符串反转
键盘录入 “abc” 输出:“cba”
输出:
方法二
StringBuffer
(1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,
Java就提供了一个字符串缓冲区类:StringBuffer 供我们使用。
(2) StringBuffer 的构造方法
public StringBuffer(): 无参构造方法
public StringBuffer(int capacity): 指定容量的字符串缓冲区对象
public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象
(3) StringBuffer 的常见功能 (自己补齐方法的声明和方法的解释 )
A:添加功能
public StringBuffer append(String str):
可以把任意类型数据添加到字符串缓冲区 ,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区 ,并返回字符串缓冲区本身
B:删除功能
public StringBuffer deleteCharAt(int index):
删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):
删除从指定位置开始指定位置结束的内容,并返回本身
C:替换功能
public StringBuffer replace(int start,int end,String str):
从 start 开始到 end 用 str 替换
D:反转功能
public StringBuffer reverse()
E:截取功能 (注意这个返回值)
public Stringsubstring(int start) public Stringsubstring(int start,int end)
(4) StringBuffer 的 练 习 ( 做 一 遍 )
A:String 和 StringBuffer 相互转换
String -- StringBuffer
构造方法
StringBuffer -- String toString() 方法
B:字符串的拼接
C:把字符串反转
D:判断一个字符串是否对称
(5)面试题
A:String,StringBuffer,StringBuilder 的区别
答:A:String 是内容不可变的,而 StringBuffer, StringBuilder 都是内容可变的。
B:StringBuffer 是同步的,数据安全 ,效率低 ;
StringBuilder 是不同步的 ,数据不安全 ,效率高
B:StringBuffer 和数组的区别
答:二者都可以看出是一个容器,装其他的数据。
但是呢 ,StringBuffer 的数据最终是一个字符串数据。而数组可以放置多种数据,但必须是同一种数据类型的。
单线程操作字符串缓冲区下操作大量数据 = StringBuilder
多线程操作字符串缓冲区下操作大量数据 = StringBuffer
(6)注意的问题:
String 作为参数传递,效果和基本类型作为参数传递是一样的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C++ 中命名空间的 5 个常见用法
相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名空间定义了新的作用域。它们提供了一种避免名称冲突的方法。 c++ 中的命名空间通常用于避免命名冲突。尽管命名空间在最近的 c++ 代码中广泛使用,但大多数较旧代码都不使用此工具。 基于对众多C++项目源码的探索与研究,总结出了在这些项目中使用命名空间的一些常见原因。 1-避免名称冲突 如前所述,这是在C++中使用命名空间最常见的原因,在这种情况下,它们的使用只是对编译器有效。无法为开发人员在代码可读性和维护性方面带来什么价值。 2-模块化应用程序 命名空间采取 “Namespace-by-feature ”的方法使代码模块化。”Namespace-by-feature” 通过命名空间来反映功能集。它将具有相互关联的项归类在同一个命名空间。这会形成具有高内聚低耦合(译者注:高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务。耦合是一个软件结构内不同模块之间互连程度的度量)、模块性很强的命...
- 下一篇
技术面试中常见的几道智力题 来看看你会做几道?
我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide 下面是大部分题目来自滴滴出行2017秋招题。有几道题目是我在做的时候没有想出来的,还有几道题目整理在这里单纯是为说明有一些智力方向的面试题并不是大家想的那么难,我们运用高中的知识就完全可以解决。 下面就是题目了,开始头脑风暴吧~~~ 问题 question one 有50家人家,每家一条狗。有一天警察通知,50条狗当中有病狗,行为和正常狗不一样。每人只能通过观察别人家的狗来判断自己家的狗是否生病,而不能看自己家的狗,如果判断出自己家的狗病了,就必须当天一枪打死自己家的狗。结果,第一天没有枪声,第二天没有枪声,第三天开始一阵枪响,问:一共死了几条狗? question two 一次朋友聚会,大家见面时总共握手45次。如果参加聚会的人和其余的每个人只握手一次,问参加聚会的共有多少人? question three 在一个平面上有三个不在一条直线上的点。请问在这个平面能够作出几条与这些点距离相同的线? ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker安装Oracle12C,快速搭建Oracle学习环境