位置: 编程技术 - 正文

【Java的String详解】(java stringapi)

编辑:rootadmin
Java的String类在开发时经常都会被使用到,由此可见String的重要性。经过这次认真仔细的学习了java的String类。发现了自己以前开发中对String使用的不足,特写此博客来记录自己对String的学习总结。 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认&#;是null,所以String的默认&#;也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 String实际上是使用字符数组来存储的数据的。从源码可以清晰看到定义的字符数组。 String在java/lang包下面,java默认导入lang包,所以使用String类时不用导入。1.创建方式(1)String ok1=new String(“ok”);(2)String ok2=“ok”;我相信很多人都知道这两种方式定义字符串,但他们之间的差别又有多少人清楚呢。画出这两个字符串的内存示意图: String ok1=new String(“ok”)。首先会在堆内存申请一块内存存储字符串ok,ok1指向其内存块对象。同时还会检查字符串常量池中是否含有ok字符串,若没有则添加ok到字符串常量池中。所以 new String()可能会创建两个对象. String ok2=“ok”。 先检查字符串常量池中是否含有ok字符串,如果有则直接指向, 没有则在字符串常量池添加ok字符串并指向它.所以这种方法最多创建一个对象,有可能不创建对象所以String ok1=new String(“ok”);//创建了两个对象String ok2=“ok”;//没有创建对象来两题习题看你是否真的明白了1.下面代码创建了多少个对象?String temp="apple"; for(int i=0;i<;i&#;&#;) { temp=temp&#;i; }复制代码答案:个2.下面代码创建了多少个对象?String temp=new String("apple") for(int i=0;i<;i&#;&#;) { temp=temp&#;i; }复制代码答案:个2.匹配相等 使用String类经常需要对两个字符串进行对比,看是否相等。这是又有==和equals两种选择,这两者方法区别很大,可能我们会弄错,下面我们对这两种方法进行详解。 首先要明白这两种方法的用途:比较类中的数&#;是否相等使用equals(),比较两个包装类的引用是否指向同一个对象时用==equals()是看数&#;是否相等,比较好理解。而==是看是否属于同一个对象。下面来举例说明==的使用先明白这个概念:常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。主要看编译 期字符串能否确定。情况一:String ok="ok"; String ok1=new String("ok"); System.out.println(ok==ok1);//fasle 复制代码明显不是同一个对象,一个指向字符串常量池,一个指向new出来的堆内存块,new的字符串在编译期是无法确定的。所以输出false情况二:String ok="apple1"; String ok1="apple"&#;1; System.out.println(ok==ok1);//true复制代码编译期ok和ok1都是确定的,字符串都为apple1,所以ok和ok1都指向字符串常量池里的字符串apple1。指向同一个对象,所以为true.情况三:String ok="apple1"; int temp=1; String ok1="apple"&#;temp; System.out.println(ok==ok1);//false复制代码主要看ok和ok1能否在编译期确定,ok是确定的,放进并指向常量池,而ok1含有变量导致不确定,所以不是同一个对象.输出false情况四:String ok="apple1"; final int temp=1; String ok1="apple"&#;temp; System.out.println(ok==ok1);//true复制代码ok确定,加上final后使得ok1也在编译期能确定,所以输出true情况五:public static void main(String[] args) { String ok="apple1"; final int temp=getTemp(); String ok1="apple"&#;temp; System.out.println(ok==ok1);//false } public static int getTemp() { return 1; } 复制代码ok一样是确定的。而ok1不能确定,需要运行代码获得temp,所以不是同一个对象,输出false。3.Intern()方法前面已经介绍常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。但我们可以通过intern()方法扩展常量池。 intern()是扩充常量池的一个方法,当一个String实例str调用intern()方法时,java会检查常量池中是否有相同的字符串,如果有则返回其引用,如果没有则在常量池中增加一个str字符串并返回它的引用。如:String ok="apple"; String ok1=new String("apple"); System.out.println(ok==ok1);//false ok1=ok.intern();//获取常量池ok的引用 System.out.println(ok==ok1);//true--指向同一个对象 复制代码 4.String常用方法(1)length() 字符串的长度   例:char chars[]={'a','b'.'c'};     String s=new String(chars);     int len=s.length(); (2)charAt() 截取一个字符   例:char ch;     ch="abc".charAt(1); 返回'b'(3)getBytes()获取对应字节数组 例:String ok="apple"; byte[]bytes=ok.getBytes(); for(int i=0;i<bytes.length;i&#;&#;) System.out.println(bytes);//输出字节数组,范围为----(4)indexOf()和lastIndexOf()    indexOf() 查找字符或者子串第一次出现的地方。    lastIndexOf() 查找字符或者子串是后一次出现的地方。(5)substring()   它有两种形式,第一种是:String substring(int startIndex)   第二种是:String substring(int startIndex,int endIndex)(6)concat() 连接两个字符串(7)replace() 替换   它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:   String replace(char original,char replacement)   例如:String s="Hello".replace('l','w');   第二种形式是用一个字符序列替换另一个字符序列,形式如下:   String replace(CharSequence original,CharSequence replacement)(8)trim() 去掉起始和结尾的空&#; (9)valueOf() 转换为字符串 ()toLowerCase() 转换为小写 ()toUpperCase() 转换为大写()startsWith()和endsWith()   startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束更多方法请参考String的API总结 String类具有immutable(不能改变)性质,当String变量需要经常变换时,会产生很多变量&#;,应考虑使用StringBuffer提高效率。在开发时,注意String的创建方法。本篇博客是本人自己学习研究的,如有错误,望修正。

推荐整理分享【Java的String详解】(java stringapi),希望有所帮助,仅作参考,欢迎阅读内容。

【Java的String详解】(java stringapi)

文章相关热门搜索词:java string方法详解,java string详解,java string详解,string.java,java stringapi,java中的string用法详解,java中的string用法详解,java中的string用法详解,内容如对您有帮助,希望把文章链接给更多的朋友!

【java对象比较器和克隆】 一.比较器Comparable和Comparator上一篇博客介绍了工具类Arrays工具类。我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序。排序操作在日常开

【java的Arrays工具类】 java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。静态方法是属于类的,不是属于类的对象。所以可以直接使用类名加方法名进行调用

[置顶] android 性能优化 1.Java内存控制对于字符串操作而言如果需要连加这样的操作建议使用StringBuilder,经过调试不难发现如果你的字符串每次连加,使用String需要的内存开销

标签: java stringapi

本文链接地址:https://www.jiuchutong.com/biancheng/383296.html 转载请保留说明!

上一篇:Android通知栏点击无法启动Activity的问题(Android通知栏点击打开安装)

下一篇:【java对象比较器和克隆】(java对象怎么比较)

  • 增值税附加税是几个点
  • 企业所得税怎么做账
  • 小规模减免增值税要交企业所得税吗
  • 钢铁租赁公司
  • 个人所得税劳务报酬范围
  • 支付外国公司费用要交税吗
  • 管家婆软件记账流程
  • 30万免税超过30万
  • 通行费发票怎么合并一张发票
  • 未交增值税最后到哪去了
  • 购销业务账务处理
  • 个体工商户办税务
  • 企业税收标准是多少
  • 增值税税收返还政策
  • 业务宣传费超出部分以后年度怎样处理
  • etc开了充值发票还可以开消费发票么?
  • 食堂固定资产折旧年限
  • 社保基金的管理模式
  • 承兑汇票承兑流程
  • 贸易公司给客户开发票
  • 单位付款方式
  • 小规模纳税人开具1%增值税专用发票可以抵扣吗
  • 会议费需要什么资料
  • 个人房产税征收标准
  • 增值税普票销售方无开户行账号是否可以
  • 预付账款收不回来摘要怎么写
  • 小规模纳税人月销售额不超过10万免征
  • 收到投资的会计科目
  • 普通增值税发票跨越可以作废吗
  • 鸿蒙系统最新版本
  • 计提法定盈余公积分录并结转
  • 在王者荣耀里怎么删除好友
  • 在windows七中
  • 怎么证明公司的存在
  • 其它权益工具投资处置时其他综合收益转那
  • 期末调汇凭证怎么调
  • 装修公司开专票要交几个点
  • cpu风扇应该怎么调
  • esafec.dll是什么东西
  • 导航栏不变,切换怎么办
  • 踩坑视频
  • Chat GPT实用案例——VUE+Chat GPT实现聊天功能教程
  • 职工福利费入账依据
  • vite vuex
  • 滴滴打车开具的电子发票可以抵扣吗
  • mfcc特征提取过程
  • 高效快速编制会计分录如何做?
  • 单位出租厂房需交税吗
  • 发票验旧有时间规定吗
  • mysql常用命令语句
  • mysql和mongo的区别
  • 经营性应收项目的减少调增 为什么是减
  • 建筑公司租赁设备怎么入账
  • 员工福利开的专票怎么做分录
  • 技术服务费可以开专票吗
  • 当月的增值税发票认证抵扣时间
  • 其他应收款坏账准备计提标准
  • 养老保险滞纳金计算器
  • 计提工会经费的工资总额包括五险一金吗
  • 多计提的税款会计处理
  • 增值税专用发票的税率是多少啊
  • 全面解析皮炎
  • centos7安装MySQL5.6
  • win8 无线网络连不上
  • Win10应用商店下载错误
  • 取消windows 7的自动关机如何设置
  • Ubuntu 14.04 64位搭建ADT开发环境的方法
  • macbookair怎么验证
  • window8输入法不见了
  • win7无线网络显示x无法启用
  • win10系统中怎么重新启动netframework
  • linux中使用find命令查找文件
  • textview可以点击吗
  • 手把手教怎么说
  • python中按下某个按键
  • android数据存储与访问的方式有
  • js模拟点击事件onclick
  • 河北社保网上申报时间
  • 服务承诺口号八个字
  • 我各位一个关于网上申报增值税所得税的申报流
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设