牛客网每日打卡-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 ,所以,满足条件,返回真。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值