Java Notes: Loops and Arrays & Methods and Class

Java的数组在内存中是怎么样的?

例如:int[] grades = new int][]{70,50,66,43,99,85,73,};



grades是一个具有“自动存储(automatic storage)”的变量。所谓“自动存储”,意思是这个对象的存储位置取决于其声明所在的上下文。如果这个语句出现在函数内部,那么它就在栈上创建对象。如果这个语句不是在函数内部,而是作为一个类的成员变量,则取决于这个类的对象是如何分配的。(多数在堆上,少数在静态区)。【参考另一个篇链接:http://blog.csdn.net/firehotest/article/details/52044794】


而指向的实际内容则永远存在堆上。首先是指向一个数组的描述(description)。接着,就是数组的实际内容。


两种内容类型的Java数组:


当Java存储的是基本类型(primitive types),存储的是实际的内容。而当是自定义类型时,是reference type。这时候,当发生swap时,前者交换的是实际的内容,而当时reference type时,只是reference type改变了,指向的内容不变。


当你用到浮点数都需要Keep in mind的一点:所有的浮点数只是approximation,如果有判断条件是double x1 == 0.0,即使计算结果正确是等于0,但也不一定成立。因为x1可能是0.00000000000000...01


关于String和StringBuilder应该知道的:


String永远是不能被改变的。当你使用substring方法时候,返回是一个新的String。调用方法的本身String内容不会被改变。


但是StringBuilder不一样,是可以改变调用方法的StringBuilder对象的。(Quiz3当中有一题阴了大家一道:StringBuilder的constructor只有参数是: char[], int capacity和String)三种。没有把char当做参数的。所以,如果你输入一个char作为参数,其会被理解成Int。


String sort by ascii code. Capitalized one is in front of lower case one. (默认的排序)


Java中的identity 和 equality:


首先需要区分两者的区别。identical 的两个reference类型的变量,指的是两个reference指向的对象是同一个对象。而如果两个reference变量是equal只需要两个reference指向的对象的state相同。state有很多的含义,像String的state是其内容。


所以,一般你自定义一个新的类的时候,都需要重写其从Object处继承的equals函数。默认equals函数检查的是hashCode(),其实就是identity. 因为Java的Object使用的hashCode就是返回其指向的内存地址的16进制表示。


但这里通常人们会犯的错误是只是重载了函数(Overload)而不是重写 (Override)。譬如,我创建了Person类,对比两个Person是否equal是判断其名字是否一样:


public boolean equals(Person obj) {
    //this is a overload
}

but 

@Override
public boolean equals(Object obj) {
    //this is a override
}


这是为什么呢?这涉及到另一个知识点。


Java中methods' signature 只包含:参数列表和函数名。注意,返回类型不属于函数签名。


所以,一般重载会使用同样的函数名但不同的参数类型实现。


不同权限描述符的可见性:




注意,protected其实是比default要大的。因为default只能包内可见,而protected对于包外的子类都可见。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值