Java基础(一)

1.&和&&的区别

&和&&都是逻辑运算符,都是判断两边同时为真则整个结果为真,否则为假;但是&&还有一个短路的功能,就是当第一个条件不成之后,后面的条件都不执行(/判断)了,而&则还是继续执行,直到整个条件语句执行完为止.

2.使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容 还是可以改变的.

例如:

public class TestFinalKeyword {

    public static void main(String[] args) {

        final StringBuffer a = new StringBuffer("abc");
        a.append("aa"); //引用变量所指向的对象的内容可以改变

        //a=new StringBuffer("ccc"); //报错!引用变量不能改变,只能指向一个对象

        System.out.println(a.toString()); //abcaa
    }
}

3.静态变量和实例变量的区别?

3.1.在语法定义上的区别

静态变量前要加 static 关键字,而实例变量前则不加.

3.2.在程序运行时的区别

①.实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量;静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了

②.实例变量必须创建对象后才可以通过这个对象来使用,实例变量使用时,通过[实例对象.实例变量]方式;静态变量则可以直接使用类名来引用,静态变量使用时,通过[类名.名称]的方式;

③.静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。

4.是否可以从一个 static 方法内部发出对非 static 方法的调用?

不可以.因为非 static 方法是要与对象关联在一起的,必须创建对象(/对象实例化)后,才可以在该对象上进行方法调用;而 static 方法调用是不需要创建对象(/对象实例化),可以直接调用.也就是说,当一 个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个 static 方法内部无法发出对非 static 方法的调用

5."=="和 equals ()方法究竟有什么区别?

5.1."=="

如果作用于基本数据类型的变量,则直接比较变量存储的"值/表示的数据"是否相等;
如果作用于引用类型的变量,则比较的是变量所指向的对象的内存地址是否相同,即比较两个变量是否指向同一个对象

5.2.equals()方法

equals()方法不能作用于基本数据类型的变量,如果要比较两个基本类型的数据或两个引用变量的值是否相等,只能用"=="操作符;

equals()方法比较的是两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的.如果对象中没有对object类中的equals()方法进行重写,则默认比较的是引用类型的变量所指向的对象的内存地址是否相同,即比较两个变量是否指向同一个对象;

例如:String、Date等类对equals()方法进行了重写的话,比较的是所指向的对象的内容(属性值)

例如:

public class MainTest {

    public static void main(String[] args) {
        //基本数据类型
        int a = 10;
        int b = 10;

        System.out.println("基本数据类型:== \t" + (a == b));  //true,a,b所表示的数值是一样的,都是10
        //注意:基本数据类型没有.equals()方法!!
        //System.out.println("基本数据类型:=="+(a.equals(b)));

        //引用类型/对象
        String c = "hello";
        String d = new String("hello");
        String e = "hello";

        System.out.println("引用类型:== \t" + (c == d)); //false,因为内存中有两个不同的对象(常量和new string("hello")),c,d指向的内存地址不同
        System.out.println("引用类型:equals \t" + (c.equals(d)));  //true,由于string对象中重写了equals方法,而且两个对象属性值一样的

        System.out.println("引用类型:== \t" + (c == e)); //true,此时内存中只有一个对象(常量"hello"),c,d指向的内存地址是一样的
        System.out.println("引用类型:equals \t" + (c.equals(e))); //true,由于string对象中重写了equals方法,c,d指向同一个对象(常量),属性值当然一样!!!
    }
}

6.public, private, protected的作用域

作用域当前类同一包子孙类其他包
public
protected×
friendly×
private×××

注意:如果在修饰的元素上面没有写任何访问修饰符,则表示 friendly!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值