博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】java 中 String s = new String("abc") 创建了几个对象?!
阅读量:5139 次
发布时间:2019-06-13

本文共 1301 字,大约阅读时间需要 4 分钟。

答案是两个,现在我们具体的说一下:

String s = new String("abc");
首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。
所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在文字池中,文字池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==判断一下两个引用变量是否指向了一个地址即一个对象

public
 
class
 Demo02 
{
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String s1 ="abc";
        String s2 
= "abc" ;
        
if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");
        
else System.out.println("trouble");
    }
}
运行后可以看出指向了一个对象,即文字池中保存了一个对象。

二、String s = new String("abc")实际上是"abc"本身就是文字池中的一个对象,在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool 中,一个在堆中。下面看这个程序,创建了几个对象。

public
 
class
 Demo03 
{
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String s1 = new String("abc") ;
        String s2 
= new String("abc") ;
        
if( s1 == s2 )//不会执行的语句}
       System.out.println("在堆中创建了一个对象");
    }
        
else{
        System.out.println(
"在堆中创建了两个对象");    
        }
        }
}

运行后可知在堆中创建了两个对象,但是在文字池中有一个对象,所以共创建了三个对象。

三、再看下一个例子:

public
 
class
 Demo04 
{
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String s = new String("abc");
        s 
= "cba";
        System.out.println(s); 
    }
}

String s = new String("abc")并不是给s赋值,而是把字符串"abc"的引用交给s持有,现在把s指向字符串"cba","cba"的引用地址把"abc"的引用地址覆盖,所以输出结果为cba

转载于:https://www.cnblogs.com/GyForever1004/p/10736066.html

你可能感兴趣的文章
UML类图几种关系的总结
查看>>
动态生成静态文本框
查看>>
用脚本一次update多个字段
查看>>
设计模式(一)
查看>>
MySQL逗号分割字段的行列转换技巧
查看>>
Maven学习笔记
查看>>
[工具分享]wingide 6 算号代码keygen
查看>>
推荐rpm软件包搜索站点https://pkgs.org
查看>>
String类中常用的操作
查看>>
git常用方法
查看>>
康托展开 + 逆展开
查看>>
IP雷达4.0+网络检测
查看>>
2013 Multi-University Training Contest 1 3-idiots
查看>>
自定义dialog
查看>>
[转载] Mac下使用iTerm2让SSH免密码登录远程服务器
查看>>
配置全局的导航栏样式(微信开发)
查看>>
python爬虫Day2:selenium基本使用
查看>>
Tomcat几种出错方法
查看>>
常用的adb命令
查看>>
Mycat 配置文件schema.xml
查看>>