• Java陷阱


    转Java一段时间了,发现Java里的有些习惯跟Win32下编程有点差别,初学者很容易上当
    1.字符串比较

    String a = "aa;
    String b = "aa22222".substring(02); // b = "aa"
    System.out.println(a == b);
    输出为 false
    为什么呢?因为实际上Java里除简单类型外,==比较的实际是实例的地址
    String比较内容是否相同应该用 a.equals(b) / a.equalsIgnoreCase(b)

    不过同时我也发现一个很有意思的问题
    String a = "aa;
    String b = "aa";
    System.out.println(a 
    == b);
    输出的结果为true!
    我想这应该是Java为了节省资源,给a/b分配的是同一个地址吧
    未验证,高手指教

    顺变说一下,Java里String内容是不可更改的
    String a = "aa";
    = "bb";
    这种写法也不会报错,但实际上a已不再是原来的那个"a"了,a会被重新分配

    因此如果一个String内容会被频繁修改,应该用StringBuffer替代
    StringBuffer buf = new StringBuffer();
    buf.append(
    "aa");
    buf.append(
    "bb");

    return buf.toString();


    2. 数组做参数
    数组做为参数时,在函数内可以修改其内容,但不可以改变其地址
    public static void test1(byte[] args)
    {
        args[
    0= 12;
    }

    public static void test2(byte[] args)
    {
        args 
    = new byte[100];
        args[
    0= 13;
    }

    public static void main(String[] args)
    {
        
    byte a[] = new byte[1];
        a[
    0= 100;
        System.out.println(a[
    0]);
        test1(a);
        System.out.println(a[
    0]);
        test2(a);
        System.out.println(a[
    0]);
    }
    输出: 100  12  12


    3.  数组索引越界
    byte z[] = new byte[1];
    z[
    100= 123;
    System.out.println(z[
    100]);
    不会报错,输出为 100


    4. ResultSet读取
    如果某一列值为NULL,当用getString取此列值时返回的不是空字符串,而是字符串"NULL"  (JDK1.5已修正)
  • 相关阅读:
    Ajax 学习笔记
    StringBulider简单用法
    asp.net 发送邮件
    log4net日志组件
    Web.Config文件详解
    关闭discuzX3.2注册页面的注册邮箱验证
    Oracle 序列(sequence)的创建、修改及删除
    MySQL 和 Oracle 主键自增长
    EL(表达式)语言的几种运算符
    SQL:select case when 的用法
  • 原文地址:https://www.cnblogs.com/sephil/p/403221.html
Copyright © 2020-2023  润新知