一. 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. c# Webservice技术整理

    因为平常项目中使用webservice比较少,然后就将本来不太熟悉的webservice给忘记掉了.所以再次整理如下: 百度搜索关键词 :c# webservice 1. 联接地址: http://w ...

  2. C语言之goto浅析

    1.  读代码时遇了的疑惑点: static int do_bind(const char *host, int port, int protocol, int *family) { int fd; ...

  3. 第七次JAVA语言笔记

  4. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  5. BETA预发布演示视频

    视频连接:优酷http://v.youku.com/v_show/id_XMTgxMjQxMjc0NA==.html?from=y1.7-2

  6. jmeter 配置元件之计数器Counter

    用jmeter生成数据 我用过几种以下几种方法 1.CSV Data Set Config  参数化 2.${_Random} ${_Random}是jmeter函数助手里面自带的一个函数,作用是返回 ...

  7. 【.Net+数据库】sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from (  select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId ...

  8. SPAMS:稀疏建模工具箱

    https://chunqiu.blog.ustc.edu.cn/?p=570 http://spams-devel.gforge.inria.fr/index.html 在一篇显著性检测文章:Sal ...

  9. hdu6415 Rikka with Nash Equilibrium (DP)

    题目链接 Problem Description Nash Equilibrium is an important concept in game theory. Rikka and Yuta are ...

  10. day 03 字符串 for 循环

    1.有变量量name = "aleX leNb" 完成如下操作: 1)移除 name 变量量对应的值两边的空格,并输出处理理结果 name = "aleX leNb&qu ...