String str = new String(“xyz“) 会创建几个对象

AutoCAD 2024 Mac版安装激活教程:从下载到破解一站式解决方案 本文提供AutoCAD 2024 Mac版的详细安装与优化指南,包括系统要求检查、下载安装流程、常见问题解决方案及性能优化设置。特别介绍了如何应用最新补丁和Update保持软件性能,帮助用户顺利完成从安装到破解的全过程。 阅读详情

答案是 常量池中存在的话是1个对象,不存在时是创建两个对象,要理解这个,就要知道string类的工作原理。下面来慢慢分析一下:

 

public class StringTest {
    public static void main(String[] args){
        String s1="Hello";

        String s2="Hello";

        String s3=new String("Hello");

        System.out.println("s1和s2 引用地址是否相同:"+(s1 == s2));
        System.out.println("s1和s2 值是否相同:"+s1.equals(s2));

        System.out.println("s1和s3 引用地址是否相同:"+(s1 == s3));
        System.out.println("s1和s3 值是否相同:"+s1.equals(s3));
    }
}

输出结果:

 

s1和s2 引用地址是否相同:true
s1和s2 值是否相同:true
s1和s3 引用地址是否相同:false
s1和s3 值是否相同:true

       上面程序中的"=="是判断两个对象引用的地址是否相同,也就是判断是否为同一个对象,s1与s2 返回为true,s1与s3返回则是false。说明s1与s2 引用的同一个对象的地址,s3则与其它两个引用不是同一个对象地址。

       原因是Java为了避免产生大量的String对象,设计了一个字符串常量池。工作原理是这样的,创建一个字符串时,JVM首先为检查字符串常量池中是否有值相等的字符串,如果有,则不再创建,直接返回该字符串的引用地址,若没有,则创建,然后放到字符串常量池中,并返回新创建的字符串的引用地址。所以上面s1与s2引用地址相同。那为什么s3与s1、s2引用的不是同一个字符串地址呢? String s3=new String("Hello"); JVM首先是在字符串常量池中找"Hello" 字符串,如果没有创建字符串常量,然后放到常量池中,若已存在,则不需要创建;当遇到 new 时,还会在内存(不是字符串常量池中)上创建一个新的String对象,存储"Hello",并将内存上的String对象引用地址返回,所以s3与s1、s2引用的不是同一个字符串地址。

       说到这里,可能有同学会问,放在常量池中会不会存在线程安全的问题?Java的工程师们早就考虑到了,String类是一个不可变对象,其它有两层意思:一是String类是一个final类,不能产生一个String的子类;二是在String类中提供的所有方法中,如果有String返回值就会创建一个String对象,不对原对象进行修改,这就保证了原对象不可改变。

       了解了String类的工作原理,回归问题本身。

       在String的工作原理中,已经提到了,new 一个String对象,是需要先在字符串常量中查找相同值或创建一个字符串常量,然后再在内存中创建一个String对象,所以 String str = new String("xyz"); 在常量池中已存在情况下会创建一个对象,在常量池中不存在情况下会创建两个对象。

 

 

深入剖析一个卷积块(ConvBlock) 阅读详情

相关推荐

深度学习论文: Towards Total Recall in Industrial Anomaly Detection

在大规模工业制造中,能够准确检测出有缺陷的零件至关重要。我们在这项工作中面临的一个特殊挑战是冷启动问题:仅使用正常的示例图像来训练模型。虽然可以针对每个类别手动设计解决方案,但我们的目标是构建能够自动适用于多个任务的系统。最佳的方法是将ImageNet模型的嵌入特征与异常检测模型结合起来。在本文中,我们在这一研究基础上进行了扩展,并提出了PatchCore,它利用了一个具有最大代表性的正常补丁特征内存库。通过这种方法,我们能够更好地解决冷启动问题,并提高系统在多任务上的性能。

mingo_敏 1815

面试题new String(“x“ + “y“)会创建多少个对象

2.调用构造器赋值 这里演示的为new String("x" + "y")3.深入问题 "a" + new String("b")1.直接赋值 String x = "x";

Muzzzzzz的博客 408

基于Python的新闻聚合与推荐系统:抓取多新闻网站内容并根据用户兴趣进行个性化推荐

本文介绍了如何使用Python构建一个新闻聚合与推荐系统,涵盖了从新闻数据抓取、用户兴趣建模到推荐算法实现的全过程。通过爬虫技术抓取新闻网站内容,使用TF-IDF、Word2Vec等算法进行内容分析,并通过推荐算法向用户推送个性化的新闻,最终帮助用户快速获取自己感兴趣的信息。你可以根据具体需求,进一步扩展和优化系统。例如,加入更多的推荐算法、优化爬虫的抓取效率、增强前端展示的互动性等。通过本文的指导,您应该能够构建一个完整的新闻聚合与推荐系统,并为用户提供个性化的新闻推荐服务。

2201_76125261的博客 1486

String str = new String("abc") 创建几个对象

1、以下代码创建几个对象 String str = new String("abc"); 创建了两个对象。 第一个对象是:"abc",存在于字符串池中;第二个对象new String(),存在于堆(heap)中(堆专门用于存储对象)。 2、以下代码创建几个对象 String str = "abc"; 创建了一个对象,这个对象是:"abc",存在于...

IT大白的博客 3088

String string=new String("wangjun")一共创建几个对象详解

首先,分析这个问题从两方面: 一:堆内存 二:常量池 总结:如果有new关键字两个方面都分析,如果没有,只判断常量池就可解决问题。 分以下几种情况: 1,String str = "ab"; 该语句创建对象的过程:先在常量池中查找是否有内容为"ab"的字符串对象,若有,直接将该对象的引用赋给str;若没有,则在常量池中创建"ab"对象,再将其引用赋给str。因为没有new关键字,所以操...

养只狗名叫猫 1015

工作10年后,再看String s = new String("xyz") 创建几个对象

这个问题相信每个学习java的同学都不陌生,作为一个经典的面试题,到现在工作这么多年了我真是认为挺操蛋的一个问题,在网上到现在你仍然可以看见很多讨论这个问题的人,其中不乏工作很多年的人都...

Python中文社区 422

String s=new String(“xyz“) 创建几个对象(详细解析)

String s=new String("sdd") 这个产生了2个对象,一个是new关键字创建new Sring();另一个是“sdd”对象,abc在一个字符串池中s这个对象指向这个串池 这个题的考点知识很多: 引用变量与对象的区别; 字符串文字"abc"是一个String对象; 文字池(pool of literal strings)和堆(heap)中的字符串对象。 一、

john2522的专栏 3万+

String str = new String(“xyz“) 创建几个字符串对象

总结:只要执行new String()就会新生成一个对象。是否在常量池创建xyz对象看常量池是否存在“xyz”。

m0_56670004的博客 362

String str = new String("xyz")创建几个对象

转载:https://blog.csdn.net/andychen314/article/details/50857313答案是 两个对象,要理解这个,就要知道string类的工作原理。下面来慢慢分析一下:public class StringTest { public static void main(String[] args){ String s1="Hello"; ...

mark_lirenhe的博客 256

【面试题】String str = new String(“xyz“) 一共创建几个对象

String str = new String("xyz") 一共创建几个对象

qq_62200539的博客 551

关于 new String("xyz")创建几个对象的理解

 我们先看一个最简单的程序view plaincopy to clipboardprint?public class T {    private String str = "###########JAVA2000#####################";      public void test() {      String s = "@@@@@@@@@@JAVA2000@@@@@@

Onlyarticle的专栏 680

String s = new String("xyz");产生了几个对象

面试官Q1:请问String s = new String("xyz");产生了几个对象? 对于这个问题,老套路先上代码: public class StringTest { public static void main(String[] args){ String s1="Hello"; String s2="Hello"; Strin...

weixin_34087307的博客 1037

String str=“aaa“与 String str=new String(“aaa”)一样吗?

String x = "张三"; String y = "张三"; String z = new String("张三"); System.out.println(x == y); // true System.out.println(x == z); // false 为什么会输出上边的结果呢,String x = "张三" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“张三”时,java虚拟机会先在常量池中检索是否已经有“张三”,如果有那么就将“张三”的地址赋给.

Theshy08的博客 5096

关于String a=new String("a")创建几个对象问题的正确答案

知道在java中除了8中基本类型外,其他的都是类对象以及其引用。所以   "xyz   "java中它是一个String对象.对于string对象来说他的对象值是不能修改的,也就是具有不变性。   看:   String   s= "Hello";   s= "Java   ";   String   s1=  "Hello";   String   s2=new  String"Hell

我的世界我的梦 8327

string str="i"String str=new String("i")String s = new String("abc")的解释!!!

string str="i"String str=new String(“i”) String x = "张三"; String y = "张三"; String z = new String("张三"); System.out.println(x == y); // true System.out.println(x == z); // false 为什么会输出上边的结果呢,String ...

qq_43617838的博客 1421

String s="xyz"String s=new String("xyz")

不知道以下说的对不对,先整理一下看看转贴自 http://hi.baidu.com/piao_live/blog/item/c1edb1fb0605ef136c22ebe2.html要理解这个,就要知道string类的工作原理。 你知道在java中除了8中基本类型外,其他的都是类对象以及其引用。所以 "xyz "java中它是一个String对象.对于string对象来说他的对象值是不能修

icecityman的专栏 2615

面试题之String str=new String("xyz");创建几个对象

先说答案,一个或两个 我们可以把String str=new String(“xyz”);拆成以下两步 String str1="xyz"; String str=new String("xyz"); System.out.println(str1==str);//false /* 第一步,现在常量池中寻找是否有"xyz"这个字符串,若是有直接指向该地址,若是没有则在堆中新建一个,新建完成之后,将...

weixin_45801172的博客 602

String s = new String("xyz");创建几个String Object? 二者之间有什么区别?

String s = new String("xyz"); 这个跟常量池没有关系,只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了1个String Object。如果是从jvm角度来说的话,它是创建了两个对象String s是在栈里创建了一个变量,new String("xyz")是在堆里创建了一个对象并被s引用到。 如果是String s = "xyz",那就要看常量池里

BornLiLi的博客 1万+

String s = new String(“xyz”)产生几个对象?

【https://www.toutiao.com/i6500028613331517965/】        对于字符串:其对象的引用都是存储在栈中的,如果是【编译期已经创建好(直接用双引号定义的)的就存储在常量池中】,如果是【运行期(new出来的)才能确定的就存储在堆中】。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。 如以下代码: Java代码

Zach-Zona的博客 1633

String s=new String("xyz");创建几个String Object?二者之前的区别是什么?

String s=new String("xyz");创建几个String Object?二者之前的区别是什么?       两个。第一个对象是字符串常量"xyz" 第二个对象new String("xyz")的时候产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz" 另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。 转载自:htt

laowang2915的博客 2万+

String s = new String(“xyz”);创建几个字符串对象

两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象String str1 = "hello"; //str1指向静态区 String str2 = new String("hello"); //str2指向堆上的对象 String str3 = "hello"; String str4 = new String("hello"); System.out.println(str...

attacking ninga 3669

String s = new String("xyz")创建几个对象问题

哈哈,要理解这个,就要知道string类的工作原理。 你知道在java中除了8中基本类型外,其他的都是类对象以及其引用。所以"xyz"java中它是一个String对象.对于string对象来说他的对象值是不能修改的,也就是具有不变性。 看: String s="Hello"; s="Java"; String s1="Hello"; String s2=new Str

shady_beat_you的专栏 1016

BIM软件:Graphisoft二次开发-BIM协同工作与数据交换二次开发+BIM模型+API接口+GDL语言+工具等全套教程

BIM软件:Graphisoft二次开发.docxBIM软件:Graphisoft二次开发_BIM协同工作与数据交换二次开发.docxBIM软件:Graphisoft二次开发_BIM模型数据结构分析.docxBIM软件:Graphisoft二次开发_BIM模型的交互操作.docxBIM软件:Graphisoft二次开发_BIM设计流程中的二次开发应用.docxBIM软件:Graphisoft二次开发_BIM软件Graphisoft二次开发基础.docxBIM软件:Graphisoft二次开发_GraphisoftAPI接口详解.docxBIM软件:Graphisoft二次开发_GraphisoftGDL语言编程.docxBIM软件:Graphisoft二次开发_Graphisoft二次开发工具与插件使用.docxBIM软件:Graphisoft二次开发_Graphisoft二次开发常见问题与解决方案.docxBIM软件:Graphisoft二次开发_Graphisoft二次开发未来趋势与展望.docxBIM软件:Graphisoft二次开发_二次开发最佳实践与规范

毕业设计基于Uniapp+SpringBoot+Vue的外卖点餐小程序源码+数据库+安装教程,含管理后台和手机端

本项目是专门为校园食堂和校园商家所定制的一款软件产品,包括系统管理后台和移动端的两个部分 ,其中系统管理后台主要提供给校园食堂,校园商家内部人员以及系统管理来使用,普通商家可以对店铺的外卖单品 ,外卖订单 ,外卖分类进行管理与维护,系统管理员具有更高权限可以对商家,用户,骑手,以及广告通知进行对应的操作。 移动端应用提供给学生等消费者使用,可以在线浏览商品,添加购物车,下单等。并且可以实时查看订单信息,学生用户也可以通过骑手申请成为骑手,成为骑手之后可以进行接单赚钱相应的赏金等操作。安装教程1、首先将创建数据库,然后将sql文件引入进数据库中(运行sql文件)2、需要进入SpringBoot后端项目中找到application.yml并配置好自己的redis和mysq3、启动后端 找到SpringBootApplication并启动即可4、启动前端pc管理端 进入前端Vue的时候进入终端先使用npm i下载依赖 然后进入package.json中选择serve启动前端pc端管理项目(或者在终端输入npm run serve也可以)5、启动小程序端

上一篇: java嵌套类和内部类、匿名类
下一篇: java 线程池原理及几种线程池详解
andychen314
博客等级 码龄16年 5粉丝 7原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值