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

哪里有零基础网站建设教学公司wordpress the tags

哪里有零基础网站建设教学公司,wordpress the tags,一对一直播系统开发,平面设计网站建设和其他多数程序设计语言一样#xff0c;Java 语言允许使用 连接两个字符串。 String name stephen; String foo Hey, name; 当我们将一个字符串和一个非字符串的值进行拼接时#xff0c;并不会报错#xff1a; String name StephenJava 语言允许使用 连接两个字符串。 String name stephen; String foo Hey, name; 当我们将一个字符串和一个非字符串的值进行拼接时并不会报错 String name Stephen; int age 25; String foo name age; // 结果为 Stephen25 其原因是当 运算符左右两边有一个值是字符串时会将另一个值尝试转化为字符串。 字符串转换机制 我们在了解字符串连接运算符前先了解一下字符串转换机制String Conversion。 Any type may be converted to type String by string conversion. 如果值 x 是基本数据类型 T那么在字符串转换前首先会将其转换成一个引用值举几个例子 如果 T 是 boolean 类型的那么就会用 new Boolean(x) 封装一下如果 T 是 char 类型的那么就会用 new Character(x) 封装一下如果 T 是 byte、short、int 类型的那么就会用 new Integer(x) 封装一下 我们知道对于基本数据类型Java 都对应有一个包装类比如 int 类型对应有 Integer 对象这样操作以后每个基础数据类型的值 x 都变成了一个对象的引用。 为什么这么做为了统一对待当我们把基础数据类型转换成对应的包装类的一个实例后所有的值都是统一的对象引用。 此时才开始真正进行字符串转换。我们需要考虑两种情况空值和非空值。 如果此时的值 x 是 null那么最终的字符串转换结果就是一个字符串 null 否则就会调用这个对象的 toString() 的无参方法。 前者很好理解后者我们一起来看看 在 Java 所有的父类 Object 中有一个重要的方法就是 toString 方法它返回表示对象值的一个字符串。在 Object 类中对 toString 的定义如下 public String toString() {return getClass().getName() Integer.toHexString(hashCode()); } 该方法返回对象的类名和散列码。如果类没有重写 toString 方法默认就会调用它的父类的 toString 方法而此时我们的值 x 统一都是对象值所以一定有 toString 方法可以调用并打印出值也有个特殊如果调用 toString 返回的值是一个 null 值那么就会用字符串 null 代替。 字符串连接符 当 运算符左右两边参与运算的表达式的值有一个为字符串时那么在程序运行时会对另一个值进行字符串转换。 这里需要注意的是 运算符同时作为算术运算符在含有多个值参与运算的时候要留意优先级比如下面这个例子 String a 1 2 equals 3; String b 12 eqauls 1 2; 变量 a 的结果是 3 equals 3变量 b 的结果是 12 equals 12。 有些人这里可能会有疑问解释一下第一种情况根据运算优先级是先计算 12 那么此时的 运算符是算术运算符所以结果是 3然后再和 equals 3 运算又因为 3 equals 3 有一个值为字符串所以 运算符是字符串连接运算符。 在运行时Java 编译器一般会使用类似 StringBuffer/StringBuilder 这样带缓冲区的方式来减少通过执行表达式时创建的中间 String 对象的数量从而提高程序性能。 我们可以用 Java 自带的反汇编工具 javap 简单的看一下 假设有如下这段代码 public class Demo {public static void main(String[] args) {int i 10;String words stephen i;} } 然后编译再反汇编一下 javac Demo.java javap -c Demo 可以得到如下内容 Compiled from Demo.java public class Demo {public Demo();Code:0: aload_01: invokespecial #1 // Method java/lang/Object.init:()V4: returnpublic static void main(java.lang.String[]);Code:0: bipush 102: istore_13: new #2 // class java/lang/StringBuilder6: dup7: invokespecial #3 // Method java/lang/StringBuilder.init:()V10: ldc #4 // String stephen12: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;15: iload_116: invokevirtual #6 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;22: astore_223: return } 我们可以发现Java 编译器在执行字符串连接运算符所在表达式的时候会先创建一个 StringBuilder 对象然后将运算符左边的字符串 stephen 拼接append上去接着在拼接右边的整型 10然后调用 StringBuilder 的 toString 方法返回结果。 如果我们拼接的是一个对象呢 public class Demo {public static void main(String[] args) {Demo obj new Demo();String words obj stephen;}Overridepublic String toString() {return App{};} } 一样的做法我们会发现此时 Method java/lang/StringBuilder.append:(Ljava/lang/Object;) 也就是 StringBuilder 调用的是 append(Object obj) 这个方法我们查看 StringBuilder 类的 append 方法 public StringBuilder append(Object obj) {return append(String.valueOf(obj)); } 而 String.valueOf(obj) 的实现代码如下 public static String valueOf(Object obj) {return (obj null) ? null : obj.toString(); } 也就是会调用对象的 toString() 方法。 可能到这里大家会有一个疑问上面不是说字符串转换对于基本类型是先转换成对应的包装类然后调用它的 toString 方法吗这边怎么都是调用 StringBuilder 的 append 方法了呢 实现方式不同其实是本质上是一样的只不过为了提高性能减少创建中间字符串等的损耗Java 编译器采用 StringBuilder 来做。感兴趣的可以自己去追踪下 Integer 包装类的 toString 方法其实和 StringBuilder 的 append(int i) 方法的代码是几乎一样的。 【云栖号在线课堂】每天都有产品技术专家分享 课程地址https://yqh.aliyun.com/live 立即加入社群与专家面对面及时了解课程最新动态 【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间2020-06-23 本文作者是阿亮啊 本文来自“掘金”了解相关信息可以关注“掘金” 原文链接 本文为云栖社区原创内容未经允许不得转载。
http://www.sadfv.cn/news/219158/

相关文章:

  • 鹤壁海绵城市建设官方网站河南省建设厅网站公示公告
  • 如何建网站做传奇网友网站制作方案策划书
  • 东莞微网站制作工厂网站建设公司
  • 网站敏感词汇哪些网站是用织梦做的
  • 惠城网站建设有哪些crm客户管理系统实训报告
  • 网站建设网站模版网站开发需要什么人
  • 上海网站建设公司哪个好桂林互联网
  • 免费网站制作成品怎么做微信小程序卖东西
  • 网站建设大纲网站建设网站软件有哪些方面
  • php网站开发价格做ps的素材哪个网站
  • 推广公司网站有哪些方式青岛网络建站网站推广
  • 中国购物网站有哪些制作网站软件免费
  • 泰州做网站软件qq钓鱼网站建设
  • 58临沂网站建设免费制作图片带字 手机软件
  • 电商网站建设运城wordpress下载管理
  • 建设一个行业性的网站价格怎么在网站上放广告
  • 河北平台网站建设做静态网站多少钱
  • 固镇网站建设北京百度网站排名优化
  • 沈阳市网站建设报价wordpress伪装成破解成功
  • 网站开发计划表唐山网站建设|唐山网站制作|公司建站666起|唐山红城网络
  • 职业学院网站建设网站建设的简要任务执行书
  • 丹阳市网站制作平面设计概述
  • 盗版视频网站建设费用刚上线的网站
  • 济南最好的网站制作公司哪家好外贸品牌网站建设
  • 网站的域名起什么好处ps网站背景图片怎么做
  • 苏州网站建设外贸莱芜网站优化怎么做
  • 网站建设的征求意见稿外贸网站建站费用
  • 网站建设策划书百度文库php网站开发是什么意思
  • 淘客网站做弹窗广告淮南网吧什么时候恢复营业
  • 各大网站响应生态建设关于做视频网站的一些代码