一.
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
正确吗? 如果不正确 为什么 如果正确 输出结果是多少 这个题目 我看了 网上的解答 有几点疑问:
1. Other o = new Other(); 和
o = new Other();有什么区别?
为什么常量对象还可以++操作啊?
2.static 函数中 不是只能调静态函数吗? 但是public void addOne  不是静态的啊?二.
给你一个StringBuffer 字符串s 函数名 int StringReverse(); 
要求:
自己实现一个reverse()函数(反向输出)
不能使用库函数直接实现!

finalize final finally 的区别

先发 这三道吧 谢谢啦

解决方案 »

  1.   

    1. Other o = new Other(); 和
    o = new Other();有什么区别?
    —— 你至少要定义变量吧?或者分成两行也是可以的:
    —— Other o;
    —— o = new Other();
    为什么常量对象还可以++操作啊?
    —— 常量对象只是不能动它自身,属性随便动,也就是不允许: o = null; 或者 o = new Object();
    2.static 函数中 不是只能调静态函数吗? 但是public void addOne 不是静态的啊?
    —— 显然无此说法,你理解错误了。
      

  2.   

    ldh911
    谢谢 大侠的回答 那还有 剩下的题目呢? 也帮忙看看 谢啦。
      

  3.   

    public class fourtest {
    public static String i;
    public static void main(String args[]){
    System.out.println(i+"2"=="2");
    }
    }补充一个 上面这个程序的输出为什么是false??? 谢谢啦 
      

  4.   

    二.给你一个StringBuffer 字符串s,函数名 int StringReverse();  
    要求:自己实现一个reverse()函数(反向输出);不能使用库函数直接实现!
    这个感觉你是不是中间有段打错字的,但是反向输出并不难,你也不要太懒了吧
    public static StringBuffer reverse(StringBuffer sb) {
      StringBuffer ret = new StringBuffer();
      for (int i = sb.length()-1; i >=0; i--) ret.append(sb.get(i));
      return ret;
    }
      

  5.   

    public class fourtest {
    public static String i;
    public static void main(String args[]){
    System.out.println(i+"2"=="2");
    }
    }补充一个 上面这个程序的输出为什么是false??? 谢谢啦  
    字符串在java中是常量,两个字符串不能直接使用==来比较,两个字符即使内容相同,但是他们在内存中的地址并不相同,因此返回的值也是false
      

  6.   

    System.out.println(i+"2"=="2");这个无非几个问题:
    1、运算符优先级必然是先做+;
    2、static String i; 会赋予该 i 变量为 null
    3、字符串连接结果是:null2"null2" == "2" 不是false还能是啥?
      

  7.   


    很遗憾你说错了,比如:
            String a = "2";
            String b = "2" + "";
            System.out.println(a == b);
    结果你认为是? true !当然这个知识本身我认为不是那么的重要。
      

  8.   

    话说这种依赖JVM优化的事情还是不要做好了
      

  9.   

    用Eclipse检验过,确实是这样的,有点不明白
    按理说用a.equals(b);我能理解
    为什么也可以直接a == b;
    求大侠再回来看看我这个问题
      

  10.   


    a==b 这个本质上是因为String采用享元模式的特色,是特例,很多考题喜欢考,具体可以Google。
    但这种知识我个人认为其实意义不大。正规做法仍然是 equals()
      

  11.   

    一.
    public class Something {
    public static void main(String[] args) {
    Other o = new Other();
    new Something().addOne(o);
    }
    public void addOne(final Other o) {
    o.i++;
    }
    }
    class Other {
    public int i;
    }
    正确吗? 如果不正确 为什么 如果正确 输出结果是多少 这个题目 我看了 网上的解答 有几点疑问:
    1. Other o = new Other(); 和
    o = new Other();有什么区别?
    为什么常量对象还可以++操作啊?
    2.static 函数中 不是只能调静态函数吗? 但是public void addOne 不是静态的啊?
    楼主的第一题正确,当时不可能有打印啊
    Other o = new Other(); 和o = new Other();没有区别,
    o = new Other();只是Other o = new Other(); 的简写“static 函数中 不是只能调静态函数”这种说法没有听说过啊
      

  12.   

    谢谢ldh911大侠 我想第二题是这样的不能使用StringBuffer中的方法 来实现反向输出的功能 否则的话直接调用reverse()方法不就可以了嘛 呵呵 能不能试着写一下啊 小弟想看看。静态函数中不能调用非静态变量 这句话对不对啊? 那实例化之后就可以调用吗? 那这样的话 这句话是不是有问题啊 !!!!
      

  13.   

    这三道问题都不难
    第一题
    final是最终变量  也就是说这个变量的栈中的值是不允许改变的,但是所指向的堆地址中的内容可以改动。
    所以第一没有问题,但是没有输出。
    第二题
    这题不知道可不可以用一些函数,笨方法就是改成数组然后倒叙打印出来就行了
    第三题
    这个属于基础知识问题,楼主还是百度吧
      

  14.   

    对了  还有一个问题,对在static方法中引用为静态方法的问题,似乎是个需要考虑,但是楼主你要是认真一些,就不难发现问题是先 new 出一个对象才去调用方法的,所以这里没有问题
      

  15.   

    明白了 我该加深一下理解了 
    类外说一下 公司是个外企 但是我去看了看 只有很小的两个大厅 估计规模不大 可是奇怪 怎么还是外企呢?这也太抠门了。csdn真是强大 我记得 我貌似没有什么问题在这不能解决的 除了几年前问了一 不通过驱动进入window内核的方式
      

  16.   


    天完全没区别啊:
    public static String reverse(String sb) {
      String ret = "";
      for (int i = sb.length()-1; i >=0; i--) ret+=sb.charAt(i));
      return ret;
    }
    静态函数中不能调用非静态变量 这句话对不对啊?
    public class Test {
      private int a = 10; // 这个a不是静态变量吧?
      public void main(String arg[]) { // 这个是静态函数对吧?
        String str = String.valueOf(100); // 这个str不是静态变量吧?
        Test t = new Test();
        System.out.println(str); // 访问没报错
        System.out.println(t.a); // 访问也没报错
      }
    }
    所以这句话应该说是有上下文的,它主要指的是不能直接:
      System.out.println(Test.a);
      

  17.   

    finalize是垃圾器回收对象用的,
    final是定义常量用的,
    finally是处理exception的时候用的,他们的区别非常大
      

  18.   


    是在垃圾收集器执行之前调用finalize其他都对。
    但是我不理解 的是楼主这么容易的都不会。
    你去面什么试??????????????
    搞不懂
      

  19.   


    这个我觉得看源码是真理吧???
    而且不是String中有个常量池来着吗???
      

  20.   

    http://blog.csdn.net/zhou9898/article/details/7664990
      

  21.   

    这些题都很基础啊,那家公司的敢问?楼主的java基础可能需要补强一下了,就算这几道弄明白了可能还有很多其他的问题没有搞懂。
      

  22.   

    ldh911在8楼和9楼的论述存在问题:
    如果按照8楼的说法:
    System.out.println(i+"2"=="null2");应该是true,但是实际运行结果是false,这是因为i+"2"和"null2"的对象地址确实不相同。
    再说9楼:对非特殊情况(基本类型及其包装类型),“==”在运行期比较对象地址这个说法,楼主不用心存疑虑,这个是正确的,7楼说的并没有错。之所以9楼的运行结果是true,确实如10楼所说,是Java在编译期对String的优化,使"a"+""与"a"具有同样的引用,具体可以参考http://blog.csdn.net/walkerjong/article/details/6775881,而String优化机制ldh911说对了,共享元模式实现滴。
      

  23.   


    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部类变量,局部变量必须定义成final 类型,
    final 是异常处理语句结构的一部分,表示总是执行。
    finalize 是Object 类的一个方法,在垃圾收集器执行的时候会被调用被回收对象的此方法,可以覆盖此方法提供的垃圾收集时的其他资源回收,
      

  24.   

    声明了一个String类型的i没有赋值,那么这个i默认值就是null。那么i+"2"的值就是"null2"也就是说问你"null2"=="2"当然返回的是false;你可以在输出语句上面定义一个Sting类型的变量赋值i+"2"调试看看这个变量的值就是"null2"
      

  25.   

    public static StringBuffer reverse(StringBuffer sb) {
    StringBuffer ret = new StringBuffer();
    for (int i = sb.length() - 1; i >= 0; i--) {
    ret.append(sb.substring(i, i + 1));
    }
    return ret;
    }
      

  26.   

    public static StringBuffer reverse(StringBuffer sb) {
    StringBuffer ret = new StringBuffer();
    for (int i = sb.length() - 1; i >= 0; i--) {
    ret.append(sb.substring(i, i + 1));
    }
    return ret;
    }
      

  27.   

    /*
    给你一个StringBuffer 字符串s 函数名 int StringReverse();  
    要求:
    自己实现一个reverse()函数(反向输出)
    不能使用库函数直接实现!
    */
    class StringReverseDemo 
    {
    public static StringBuffer s = new StringBuffer(new String("abcdefg"));
    public static void main(String[] args) 
    {
    StringReverseDemo.stringReverse();
    System.out.println(s.toString());
    }
    public static void stringReverse()
    {
    for(int i=0;i<s.length()/2;i++)
    {
    int index = s.length() - i - 1;
    char temp = s.charAt(index);
    s.setCharAt(index,s.charAt(i));
    s.setCharAt(i,temp);//交换对应字符
    }
    }
    }
      

  28.   

    http://blog.csdn.net/mjhwy/article/details/7732661