CSDN摘要1

1. public class test(
2. public static void main(string[]args){
3. string foo = args [1];
4. string foo = args [2];
5. string foo = args [3];
6. }
7. )
And command line invocation:
Java Test red green blue
What is the result?
A. Baz has the value of “”
B. Baz has the value of null
C. Baz has the value of “red”
D. Baz has the value of “blue”
F. The code does not compile.
G. The program throws an exception.

1.Test名字不一致

2.数组越界

3.FOO重复定义 

 

String s = new String("abc");创建了几个String Object?
引用变量与对象的区别;
字符串文字"abc"是一个String对象;
文字池(pool of literal strings)和堆(heap)中的字符串对象。

    一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。
        A aa;
        这个语句声明一个类A的引用变量aa[我们常常称之为句柄],而对象一般通过new创建。所以题目中s仅仅是一个引用变量,它不是对象。

    二、Java中所有的字符串文字[字符串常量]都是一个String的对象。有人[特别是C程序员]在一些场合喜欢把字符串"当作/看成"字符数组,
        这也没有办法,因为字符串与字符数组存在一些内在的联系。事实上,它与字符数组是两种完全不同的对象。

        System.out.println("Hello".length());
        char[] cc={'H','i'};
        System.out.println(cc.length);

    三、字符串对象的创建:
        由于字符串对象的大量使用(它是一个对象,一般而言对象总是在heap分配内存),Java中为了节省内存空间和运行时间
        (如比较字符串时,==比equals()快),在编译阶段就把所有的字符串文字放到一个文字池(pool of literal strings0中,
        而运行时文字池成为常量池的一部分。文字池的好处,就是该池中所有相同的字符串常量被合并,只占用一个空间。
        我们知道,对两个引用变量,使用==判断它们的值(引用)是否相等,即指向同一个对象:

  String s1 = "abc" ;
  String s2 = "abc" ;
  if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");
  else   System.out.println("trouble");
       

    这里的输出显示,两个字符串文字保存为一个对象。就是说,上面的代码只在pool中创建了一个String对象。

    现在看String s = new String("abc");语句,这里"abc"本身就是pool中的一个对象,而在运行时执行new String()时,
    将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。ok,这条语句就创建了2个String对象。


    String s1 = new String("abc") ;
    String s2 = new String("abc") ;
    if( s1 == s2 ){ //不会执行的语句}
   

    这时用==判断就可知,虽然两个对象的"内容"相同(equals()判断),但两个引用变量所持有的引用不同,

    BTW:上面的代码创建了几个String Object? (三个,pool中一个,heap中2个。)

楼上的解释很清楚,不过答案比不完善,
String s = new String("xyz");
这个语句创建了几个对象?
可能是一个,因为常量池中可能已经存在“xyz”这个对象了,所以这个语句不会再在常量池中创建了,只在堆里创建一个对象。如果常量池中不存在“xyz”,则会创建两个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值