一. Java中泛型如何比较大小,继承Comparable类,然后实现其唯一的方法compareTo():

 public class GenericClass<E extends Comparable<E>>{
public int com(E e1, E e2){
return e1.compareTo(e2);
}
}

二. Java中参数传值还是传引用的问题:

  按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。

  按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址的一个副本,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。但是指向原始对象的引用不会改变!

下面从赋值语句和java方法的参数列表两方面分别叙述:

  赋值语句:

    对象类型的对象赋值时是按引用传递的;八大基本类型(int、long、double、float、byte、boolean、char)的对象赋值时是按值传递的;

StringBuffer s = new StringBuffer("good");
StringBuffer s2 = s; //按引用传递,s和s2指向的是内存中的同一个地址
s2.append(" afternoon!");
System.out.println(s); //good afternoon int i =5;
int i2 =i; //按值传递
i2 = 6;
System.out.println(i); //

  java方法的参数列表:

    参数列表中,对象类型的对象是按引用传递的,但无论方法体内进行了何种操作,都不会改变实参对象的引用;

          八大基本类型(int、long、double、float、byte、boolean、char)的对象是按值传递的;

 public class test {
public static void main(String[] args) {
StringBuilder s = new StringBuilder("good"); //good
StringBuilder s2 = new StringBuilder("bad"); //bad
test(s,s2); //按引用副本传递,但是不管test()方法的内部对s,s2指向的对象的内容作了什么样的修改,s和s2所指向的对象不会改变
               //通俗一点说就是:将s和s2看做指针的话,指针指向的对象的内容不管如何变化,s和s2这个指针绝对不会变
System.out.println(s); //goodhah2 ,此处即为s指向的对象内容从good变为了goodhah2
System.out.println(s2); //bad
} public static void test(StringBuilder s,StringBuilder s2){
System.out.println(s); //good
System.out.println(s2); //bad
s2=s; //按引用副本传递
s = new StringBuilder("new"); //s指向一个新的对象
System.out.println(s); //new
System.out.println(s2); //good
s.append("hah");
s2.append("hah2");
System.out.println(s); //newhah
System.out.println(s2); //goodhah
}
}

【总结】

  1. 不管Java参数的类型是什么,一律传递参数的副本。如果Java是传值,那么传递的是值的副本;如果Java是传引用,那么传递的是引用的副本。

  2. 不管是赋值语句,还是java方法的参数列表,基本数据类型是传值(副本),对象类型传引用(副本)。

三. equals()和==的比较

  1. equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象(引用地址)是否相同的。

    == 比较符是比较指向的对象是否相同的,也就是对象在对内存中的的首地址。

  2. equals 方法是 java.lang.Object 类的方法,Object类中的equals方法是用来比较“地址”的,但是String类中重新定义了equals这个方法,而且比较的是值,而不是地址。

  3. 如果是基本类型(byte, short, int, long, float, double, char,boolean)比较,那么只能用==来比较,不能用equals();

  4. 对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。

  5. 注意一个基本的原则:在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法

四. java中的堆、栈、常量池

  栈:存放八大基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
  堆:存放用new产生的数据,由垃圾回收来负责的

      【栈中的变量指向堆内存中的变量,这就是 Java 中指针的思想】
  静态域:存放在对象中用static定义的静态成员
  常量池:存放常量。常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对 象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名; 字段的名称和描述符; 方法和名称和描述符。 虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和 floating point常量)和对其他类型,字段和方法的符号引用。对于String常量,它的值是在常量池中的。

【总结】:

  a.栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String,数组.对象等等),但不存放对象内容

  b.堆中存放使用new关键字创建的对象.

  c.字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好,存放在字符串常量池中,而有的是运行时才被创建.使用new关键字,存放在堆中。

Java学习遇到的问题的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  4. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  5. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  6. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  10. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. SDN前瞻 传统网络的缺陷

    引言 在网络发展速度如此之快的今天,传统网络的架构充满了危机,主要有这四个问题: 传统网络部署管理困难. 分布式架构瓶颈出现. 流量控制难真正实现. 设备不可编程. 现在的网络厂商 种类繁多的网络厂商 ...

  2. OOP 1.1 引用

    1.1 引用 1.语法:类型名&引用名=某变量名 e.g. int &b=a; 定义:引用则等价这个变量 引用名的类型是:类型 & 注意事项: ①定义引用时,一定要将其初始化成 ...

  3. UVALive - 6916 Punching Robot Lucas+dp

    题目链接: http://acm.hust.edu.cn/vjudge/problem/96344 Punching Robot Time Limit: 1000MS64bit IO Format: ...

  4. scala程序运行的几种方式

    HelloWorld简单实例 object HelloWorld{ def main(args:Array[String]){ println("HelloWorld") } } ...

  5. WebService(一)

    1.简介 Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用 ...

  6. HTML&CSS实体

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. mybatis 批量插入 返回主键id

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签 ...

  8. python OCR 图形识别

    1.pip install pyocr 2.pip install PIL 3.安装tesseract-ocr http://jaist.dl.sourceforge.net/project/tess ...

  9. 第115天:Ajax 中artTemplate模板引擎(一)

    一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...

  10. Java实现Websocket

    Websocket介绍 在一个 WebSocket应用中, 服务器发布一个 WebSocket端点, 客户端使用这个端点的URI来连接服务器.建立连接之后,websocket协议是对称的;客户端和服务 ...