欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 39058 次 点评:72

牛客网每日打卡-Java基础-20160326,-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:
123Integer 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 ,所以,满足条件,返回真。


相关文章

    暂无相关文章
相关栏目:

用户点评