Java之object和string的理解

2023-10-27

Java之object和string的理解

文章链接http://blog.csdn.net/qq_16628781/article/details/65036244

知识点:

  1. 栈区、堆区和方法区;
  2. object类clone()和qeuales()方法理解;
  3. string类拼接的理解;
  4. 新名词记录{stringBuilder:在元数据上操作,不产生额外内存损耗}

概念

栈区:String s 声明对象的存放区域

堆区:存放new出来的对象的地址值

方法区:1、字符串常量池:”hello”—>地址“:0x001


java object基类:

clone()方法:克隆一个一模一样的对象,不会影响原对象。

注意:我们经常使用的“=”赋值号,是引用的。所以可能会改变原对象的属性。


equals()方法:默认是比较两个对象的地址值。

注意:string类重写了tostring()方法,所以string类型数据比较的是字符串是否相同了。

“==”号比较的是对象的地址值相不相同。如何if(1 == 2)比较的是内存的地址值是否相同。


tostring()方法:输出类的属性。一般来说输出的格式是:类名 + @ + 地址值。

注意:一般来说输出地址值的作用不大。可以重写此方法,然后按照我们的格式进行个性化输出。

一般来说用在bean/entity等类里面重写比较多。


string类

字符串一旦被赋值,内容就不能改变,但是引用可变。
例如:

String s = new String(); //默认构造函数,s什么东西都没有

byte[] bytes = {97,98,99,100}; //A,B,C,D的哈希码

String s2 = new String(bytes); //s2的值为:A,B,C,D

注意:s2先去堆区中找“A,B,C,D”,如果有,则直接返回地址,如果没有就需要创建一个新的空间。

关于字符串的拼接也是如此。
例如:

String s = “hello”;//在方法区中有,就直接返回;无,则创建;
s +=“word”;//s = helloword 在方法区中没有,要创建。s又是引用另一个地址值

所以如果需要更好的性能要求,可以使用stringBuilder类进行拼接,此类的append会在原来的内容上增加,而不会另开空间。 在最新的Java8上面,string类也将和stringBuilder一样,拼接字符串时,不会再开辟新的空间了

区别:
String s2 = new String(“hello”);//在堆区中,实体放在方法区中的字符串常量值中,在栈区中引用的堆区值则是另外一个地址。
String s1 = “hello”;//栈区中的声明,直接引用方法区中的地址值,如果有的话,直接返回地址值。


string类的判断功能:

equals(object obj);
equalsIgnorecase(String str);
contains(string str);
startswith(String str);
endswith(String str);
isEmpty();
indexOf(int index)//返回指定字符串在此字符串中第一次出现的索引
charAt(int index)//返回指定位置的char字符
indexOf(String str)//返回指定字符的索引
indexOf(int start,int end)//包左不包右
indexOf(int start)//包含start,默认到结尾
subString(int start)//默认到末尾
subString(int start,int end)//包左不包右

总结

理解最终的基类的注意的几个点,有助于我们理解出现的一些很奇葩的问题,例如“=”引用,新的对象改变属性值,是会对元数据产生影响的。那么如果我们需要和元数据完全隔绝,那么应该使用clone()方法进行克隆。

在字符串拼接问题上,很多人都是使用string类进行直接操作。如果每一次拼接,在堆区中都找不到(很大可能),那么每一次都会产生一个丢弃的对象,这在移动设备这样空间有限的机器上运行是拖累性能的bug。

而stringBuilder类则可以解决上面的问题,所以推荐尽量使用stringBuilder。

至此。
如有任何问题,请及时与我联系,谢谢。

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

Java之object和string的理解 的相关文章

随机推荐

  • WEB-CTF通关教程二

    信息泄露的第二关 进去页面如下 查看源代码发现后缀为 sql的文件 看见这个文件思路就是把这个文件下载下来查看敏感数据 尝试在链接后直接加文件名 发现直接下载了我们的文件 使用记事本打开文件 得到flag值 暴力破解第二关 打开页面提示如下
  • 将手机号中间四位进行隐藏操作(Java)

    import java util Scanner public class StringExample2 public static void main String args 将手机号中间四位数字用 来替代 用截取字符串的方法 将前三位和
  • 有点问题的代码

    一个有问题的程序 import javax swing import java awt event import java awt class EditBook public static void main String args Edi
  • 详解 http-server的安装和使用

    简介 http server 命令行http服务器 http server是一个简单的零配置命令行http服务器 它足够强大 足以用于生产用途 但它既简单又易于破解 可用于测试 本地开发和学习 使用前提 http server 基于node
  • Android:位置服务

    前言 在开发 Android 位置相关应用时 可以从 GPS 全球定位系统 passive network 获取用户位置 通过 GPS 能获得最精确的信息 LocationProvider 是位置源的意思 用来提供定位信息 常用的 Loca
  • Apriori算法是什么?适用于什么情境?

    Apriori适用于什么场景 Apriori算法是常用的用于挖掘出数据关联规则的算法 它用来找出数据值中频繁出现的数据集合 找出这些集合的模式有助于我们做一些决策 例如什么商品集合顾客会在同一次购物中购买 最著名的例子莫过于啤酒与尿布的故事
  • Android蓝牙开发的一些经验

    http blog csdn net icyfox bupt article details 25487125 先说一下背景 我是开发手机与带蓝牙的智能设备 蓝牙血压计 血糖仪 手环等 设备对接的APP 也就是说 在设备端没有什么可以操作的
  • 面试官:我就问了一个JVM性能调优,没想到他能吹半个小时

    一 JVM内存模型及垃圾收集算法 1 根据Java虚拟机规范 JVM将内存划分为 New 年轻代 Tenured 年老代 永久代 Perm 其中New和Tenured属于堆内存 堆内存会从JVM启动参数 Xmx 3G 指定的内存中分配 Pe
  • 迟来的函数传参补充——传引用【引用调用】【c++】

    文章目录 1 传引用 1 1 特点 1 2 使用 1 2 1 一般引用 1 2 2 常量引用 1 3 案例 1 3 1 常见变量引用做函数参数 1 3 2 结构体引用做函数参数 1 传引用 函数传参 几乎一直在用简单的值传递 或者传指针 前
  • Selenium浏览器自动化测试框架简单介绍

    目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器
  • Python--类及其方法

    Python 类及其方法 文章目录 Python 类及其方法 前言 一 类的定义 二 继承类定义 二 类的专业方法 前言 在 Python 中 面向对象编程主要有两个主题 就是类和类实例 类与实例 类与实例相互关联着 类是对象的定义 而实例
  • React怎样在非组件环境下拿到路由信息实现路由跳转

    最近写项目的时候遇到一个问题 如图所示 用户token失效后 页面需要跳转回登录页面 用location href直接赋值会导致页面刷新 对SPA来说是可耻的 而且location href跳转的时候 页面并没有提示信息出现就直接跳转了 然
  • 微信小程序——flex布局

    flex布局的基本知识 flex布局作用于父容器之上 用于控制其子盒子的位置和排列的方式 flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为Flex布局 box display
  • 应用层概述、基本原理

    网络应用体系结构 客户机 服务器结构 Client Server C S 点对点结构 peer to peer P2P 混合结构 Hybrid 1 客户机 服务器结构 服务器 7 24小时提供服务 永久性访问地址 域名 利用大量服务器实现可
  • aix安装bff_在AIX中安装与维护软件

    学习内容 在 AIX 中安装与维护软件 学习目标 1 了解安装软件包的含义及命名规则 2 了解 AIX 如何发布补丁 知道自己的 AIX 及已安装软件的版本情况 3 知道如何安装与管理软件及升级 4 会修复损坏的软件 5 知道如何通过 Fi
  • Linux/Windows中根据端口号关闭进程及关闭Java进程

    目录 Linux 根据端口号关闭进程 关闭Java服务进程 Windows 根据端口号关闭进程 Linux 根据端口号关闭进程 第一步 根据端口号查询进程PID 可使用如下命令 netstat anp grep 8088 以8088端口号为
  • java判空方式

    java判空方式 1 数据结构判空 map list set CollectionUtils isEmpty 为空 CollectionUtils isNotEmpty 不为空 2 对象判空 Objects isNull 为空 Object
  • IPv6你知道多少?

    IPv6是什么 互联网协议 IP 地址是分配给连接到互联网的每个设备的数字标识符 从广义上讲 IP地址允许设备相互通信并交换信息 Internet协议版本4 IPv4 于1983年发布 至今仍用于大多数Internet通信 IPv4地址使用
  • MongoDB.WebIDE:升级版的Mongodb管理工具

    很早以前收藏了一片文章 强大的MongoDB数据库管理工具 最近刚好要做一些MongoDB方面的工作 于是翻出来温习了一下 用起来也确实挺方便 不过在使用过程中出现了一些个问题 加上更喜欢MongoUVE的操作习惯 于是决定 自己动手 丰衣
  • Java之object和string的理解

    Java之object和string的理解 文章链接http blog csdn net qq 16628781 article details 65036244 知识点 栈区 堆区和方法区 object类clone 和qeuales 方法