牛客网每日打卡-Java基础-20160326

Posted 由此及彼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网每日打卡-Java基础-20160326相关的知识,希望对你有一定的参考价值。

什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。


Java专项练习

关于JAVA的垃圾回收机制,

JAVA程序不能依赖于垃圾回收的时间或者顺序。
 
  java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。
 
 
  当对象的引用变量被赋值为null,可能被当成垃圾。
 
 
  public 
  class 
  Example 
 
 
      
  String str = 
  new 
  String(
  "good"
  );
 
 
      
  char
  [] ch =  
  'a'
  
  'b'
  
  'c' 
  ;
 
 
   
 
 
      
  public 
  static 
  void 
  main(String args[]) 
 
 
          
  Example ex = 
  new 
  Example();
 
 
          
  ex.change(ex.str, ex.ch);
 
 
          
  System.out.print(ex.str + 
  " and "
  );
 
 
          
  System.out.print(ex.ch);
 
 
      
  
 
 
   
 
 
     
  public 
  void 
  change(String str, 
  char 
  ch[])      
 
 
     
  
 
 
          
  str = 
  "test ok"
  ;
 
 
          
  ch[0] = 
  'g'
  ;
 
 
      
  
 
 
  
 
good and gbc
考察值传递和引用传递。对于值传递,拷贝的值用完之后就会被释放,对原值没有任何影响,但是对于引用传递,拷贝的是对象的引用,和原值指向的同一块地址,即操作的是同一个对象,所以操作之间会相互影响。 所以对于String str是值传递,操作之间互不影响,原值保持不变。而ch是数组,拷贝的是对象的引用,值发生了改变, (其实都是引用传递,只是因为String是个特殊的final类,所以每次对String的更改都会重新创建内存地址并存储(也可能是在字符串常量池中创建内存地址并存入对应的字符串内容),但是因为这里String是作为参数传递的,在方法体内会产生新的字符串而不会对方法体外的字符串产生影响。)


 
  Consider the following code:
 
 
  
   
1 2 3 Integer s= new Integer( 9 ); Integer t= new Integer( 9 ); Long u= new Long( 9 );
Which test would return true?
(s.equals(t))
(s.equals(9))
(s.equals(new Integer(9))

(s.equals(t)) , Integer 的 equals 方法如下:

    public boolean equals(Object obj)

        if (obj instanceof Integer)

            return value == ((Integer)obj).intValue();

       

        return false ;

是 Integer 的实例且 value 值也相等的情况下返回真,其他返回假。

在这里, s 和 t 都是 Integer 类型且值都为 9 ,因此结果为真。

 

(s.equals(9)) , 在进行 equals 比较之前,会对 9 调用 Integer.valueOf 方法,进行自动装箱 , 由于 IntegerCache 中已经存在 9 ,所以,直接返回其引用,引用相同, equals 就自然相同了。所以结果为真。

 

(s.equals( new Integer(9)) ,直接创建了一个新的 Integer 实例,但且值也为 9 ,所以,满足条件,返回真。

 

以上是关于牛客网每日打卡-Java基础-20160326的主要内容,如果未能解决你的问题,请参考以下文章

牛客java选择题每日打卡Day12

每日一刷与题解:Java基础知识+sql

关于牛客网的JAVA面试题错题总结以及归纳

Java实习生每日10道面试题打卡!

Java实习生每日10道面试题打卡!

华为od机考牛客网是骗人的吗