Java中的数组和字符串

   本来一周更新一篇自己的博客,写一些学编程的感悟。但从第一次发表到现在过去了25天。因为这段时间太忙了,但这不应该成为借口,我必须要认真的去坚持做一件事,即使有很少的人会看到,从中得到的收获我自己可以感悟到。
    学Java有一段时间了,朱老师说我们现阶段学到的Java都是最最基础的,是冰山一角,只有你更加深入的学习才能体会到它的强大。
这次用到了eclipse平台编程,它会自动出现很多函数,原来Java有这么多函数提供给用户,大大减少了编程量,我也更加明白了Java与面向结构语言的不同,它更方便、容错性更强。

    学习了数组和字符串,朱老师说数组int[] a = new int[20],此时的int[]是类的名称;同理String s = "Hello";中的String都是Java自带的类,我们直接拿来用就可以了。那么a和s就是类的一个对象,它们本质是指针,存放的是数组或字符串首元素的地址。那么Java不支持指针但处处用到指针的思想。

    这里举一个例子,若在主函数中有下列一段程序:

    int[] a1 = new int[10];//a1是数组名,此数组可以存放10个int型数据,此时数组值默认为0;
    int[] a2 = a1.clone();//clone()函数功能是复制一份a1,赋值给a2。当然a1和a2不同空间;
    System.out.println(a1.equals(a2));//输出a1和a2的比较结果,函数equals()返回值为boolean类型;

    以上程序结果为FALSE。讨论一下函数equals()的功能,说明此函数比较的不是数组内元素的值,而是比较a1和a2的值,a1和a2存储的是两个不同数组的首地址,则返回值为FALSE。

    再举一个简单例子,在主函数中有下列一段程序:

    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1.equals(s2));

    上述例子的结果为TRUE。因为在Java中,若两个字符串的值完全相同,那么这两个字符串对象(也就是上述例子中的s1和s2)指向同一个字符串空间(更早定义的那一个)。此例中s2指向s1的空间,说明s1和s2值相同,则返回值为TRUE。

    在Java中字符串的值不会被更改,例如下段程序:
    String s3 = "abc";
    String s4 = "abc";
    s4.replace('a','x');//函数replace('A','B')将字符串中字符A换为字符B;
    System.out.println(s4);

    上述例子输出的结果为"abc",而不是我们期望的"xbc"。说明字符串s4根本没被更改。
    若将上面的程序s4.replace('a','x');改为s4 = s4.replace('a','x');那么结果为"xbc";将替换后的字符串重新复制给s4,s4指向
新申请的空间,原来旧的s4被丢弃。那么这里我有一个疑问,如果有人蓄意破坏程序,申请了一个特别大的空间然后丢弃或者经常丢弃一些空间,那么对内存伤害是很大的。朱老师解释说Java有一套自己的垃圾数据处理机制,这正是它和C的不同之处,也是它的强大之处。

    在字符串类中还提供了很多函数,例如substring(),compareTo(),split(),X.valueof()等,如果凭记忆去记那将是一个浩大的工程,我的学习方法是经常去用,每次练习编程时学习几个函数,需要用到的时候去学习。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值