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

南昌网站建设案例济南seo优化外包服务公司

南昌网站建设案例,济南seo优化外包服务公司,前端开发工程师怎么考,云主机安装网站String a new String(“abc”); 创建了几个对象?String a “abc”; 呢? 答案:String a new String(“abc”); 创建了1个或2个对象;String a “abc”; 创建了0个或1个都对象 String a new String(“abc”); 创建过程 首先在…

String a = new String(“abc”); 创建了几个对象?String a = “abc”; 呢?

答案:String a = new String(“abc”); 创建了1个或2个对象;String a = “abc”; 创建了0个或1个都对象

String a = new String(“abc”); 创建过程

  1. 首先在堆中创建一个实例对象new String, 并让a引用指向该对象。(创建第1个对象)
  2. JVM拿字面量"abc"去字符串常量池试图获取其对应String对象的引用。
  3. 若存在,则让堆中创建好的实例对象new String引用字符串常量池中"abc"。(只创建1个对象的情况)
  4. 若不存在,则在堆中创建了一个"abc"的String对象,并将其引用保存到字符串常量池中,然后让实例对象new String引用字符串常量池中"abc"(创建2个对象的情况)

String a = “abc”; 创建过程

  1. 首先JVM会在字符串常量池中查找是否存在内容为"abc"字符串对应String对象的引用。
  2. 若不存在,则在堆中创建了一个"abc"的String对象,并将其引用保存到字符串常量池中。(创建1个对象的情况)
  3. 若存在,则直接让a引用字符串常量池中"abc"。(创建0个对象的情况)

扩展:String a = “abc” + “d”; 创建了几个对象?

因为在编译期间,应用了编译器优化中一种被称为常量折叠(Constant Folding)的技术,会将编译期常量的加减乘除的运算过程在编译过程中折叠。编译器通过语法分析,会将常量表达式计算求值,并用求出的值来替换表达式,而不必等到运行期间再进行运算处理,从而在运行期间节省处理器资源。

而上边提到的编译期常量的特点就是它的值在编译期就可以确定,并且需要完整满足下面的要求,才可能是一个编译期常量:

  • 被声明为final
  • 基本类型或者字符串类型
  • 声明时就已经初始化
  • 使用常量表达式进行初始化

所以上面的语句在运行期就等同于String a = “abcd”; 故答案是创建了0个或1个都对象。

比较字符串

package com.fastech;public class StringTest {public static void main(String[] args) {String a = "abc";String b = "abc";String c = "ab" + "c";String d = new String("abc");String e = new String("abc");System.out.println(a == b);System.out.println(a == c);System.out.println(a == d);System.out.println(d == e);System.out.println(a.equals(d));System.out.println(d.equals(e));}}

结果:

true
true
false
false
true
true

== 运算符

  1. 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等;
  2. 如果 == 是比较的两个对象,那么比较的是两个对象的引用,也就是两个对象是否为同一个对象,并不是比较的对象的内容;

通过之前的几个问题可知变量a、b、c的引用地址相同。故a == b和a == c的结果为true。而new String(“abc”) 无论字符串常量池中是否存在“abc”,都会在堆中生成一个新的对象。d和e的引用指向各自堆的地址,堆引用才指向常量池。所以a、d、e三者不相等。

equals方法

  1. equals方法主要用于两个对象之间,检测一个对象是否等于另一个对象;
  2. equals方法在Object的代码其实也是 == 的关系运算符。
public boolean equals(Object obj) {return (this == obj);
}

String类重写了Object类的equals方法

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;
}

可以看到String类的equals方法先比较两个对象的引用地址,此时运用了 == 的关系运算符。如果两个对象的引用地址不同,会比较字符串中的每个字符是否相同,全部相同则返回true,否则返回false。故a、b、c、d、e这几个变量通过equals方法比较都相等

http://www.mmbaike.com/news/62148.html

相关文章:

  • 宁波市北仑区建设局网站百度客户管理系统登录
  • 网站制作的地方济南seo关键词优化方案
  • 昆明广告设计公司排行seo软件全套
  • 关于公司建设网站的意义品牌推广方案策划书
  • wordpress 免费么信息流优化师需要具备哪些能力
  • 怎么自己做网站推广推广app用什么平台比较好
  • 票务网站开发中国seo高手排行榜
  • 南昌专业网站建设公司关键词难易度分析
  • 广西医疗网站建设百度云app
  • 廊坊网站制作公司品牌推广百度seo
  • 深圳市城乡建设部网站首页丽水网站seo
  • 扬州有什么做网站的公司抖音seo什么意思
  • 招代理的网站建设公司seo排名优化培训
  • 重庆市建设工程信息网查询人员成都seo公司排名
  • 好一点的网站是怎么做的上海专业seo排名优化
  • 网站建设的用处今日最新军事新闻
  • 卖彩票的网站怎么做的百度快照投诉中心人工电话
  • 怎样在局域网做网站站内优化
  • 网站建设时间查询google搜索引擎优化
  • 安徽华强建设集团网站网络推广公司是干什么
  • 网站建设服务英文苏州优化收费
  • 网站建设主要职责建站平台在线提交功能
  • 网站测试的方法找客户的软件有哪些
  • 网站如何做友情链接sem优化师是什么意思
  • 京东不让卖网站制作么旅游景点推广软文
  • 网站建设_seo技术支持nba实力榜最新排名
  • 济南建网站公司今日重大事件
  • 成都网站建设龙兵玄幻小说排行榜百度风云榜
  • 网站开发岗位要求seo关键词分类
  • 阿里云 做网站郑州seo地址