【前面的话】

毕业将近6个月了,试用期也快要过去了,期待接下来的日子。在金融类性质的机构,最痛苦的是也许就是大部分系统外包,所以比较少写代码,在这六个月中只写了1个月左右的代码,然后每天都在做一些比较杂的事情,希望有机会可以写一写代码,提高技术。

前段时间做了一下开发,最近马上也要过年了,时间相对就比较多了,所以又回过头来看看书,巩固一下基础知识,做一些笔记,看看自己的思维,主要目的是为了自己积累,所以都是很基础、很基础的知识,请自行选择。如果看到这里要走了,祝新年快乐,也不枉进来一趟。

【知识汇总】

  • String类的定义:String在java中是一个比较特殊的类,因为其自己可以做一种数据类型直接定义变量,如下:
  1. String str = "hello";
  2. String str = new String ("hello");
  • String两种不同定义地理解:
  1. String str = "hello"; //可以把str理解为一个char*,str指向数据段中的字符串"hello"。
  2. String str = new String ("hello");//是new了一个对象,堆空间分配了一块内存,把对象放在里面,str 指向这个对象
  • 上面两者的区别:
  1. String str 1= "hello";
  2. String str 2= "hello";

//当定义str2的时候,系统会先检测数据段里是否已经有了“hello”,如果有了那么str2直接指向这个“hello”,这是系统的优化。也就是说不会单独再在数据段中存储“hello”,str1和str2指向的是同一个数据段,也就是str1和str2代表的数据段地址也是一样的。

//改正哈,下面1楼指出了这里有误哈:可以参见1楼。

  1. String str 3= new String ("hello");
  2. String str 4= new String ("hello");

//str4是重新new的一个对象,是在堆空间又单独存储的,也就是说str3和str4的地址是不一样的,但是存储内容是一样的。读者可以运行一下下面的代码:

代码:

String s1="hello";
String s2="hello";
System.out.println(s1==s2);
String s3=new String("hello");
String s4=new String("hello");
System.out.println(s3==s4);
System.out.println(s3.equals(s4));

运行结果:

true
false
true
  • 对于String类对象是不可变字符的理解:
  1. String str1="hello";
  2. str1=str1.substring(0, 3)+” p!”;

//首先substring(0, 3)表示提取字符串第一个到第三个的字母。

//对于不可变的理解就是说,存储“hello”的地方永远存储的是“hello”,除非系统自动收回,是永远不会变的。对于str1提取子串,只是让str1再次指向“hello”的引用,对于这个引用再进行改变,而原来存储“hello”的地方是不变的。读者可以运行一下下面的代码:

代码:

String str1="hello";
String str2=str1;
str1=str1.substring(0, 3)+"p!";
System.out.println(str1);
System.out.println(str2);

运行结果:

help!
hello

//因为第2行代码是让str1和str2指向了同一个地址段,后面改变了str1的指向,而str2指向的东西是没有改变的。

java代码】

public class Text {
public static void main(String[] args){
//说明了s1和s2指向的同一个地址段,s3和s4指向的是不同的地址段,而存储内容是一样的
String s1="hello";
String s2="hello";
System.out.println(s1==s2);
String s3=new String("hello");
String s4=new String("hello");
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
//说明了str1和str2指向同一个地址段,而后面改变的str1只是对"hello"的一个引用的改变
String str1="hello";
String str2=str1;
str1=str1.substring(0, 3)+"p!";
System.out.println(str1);
System.out.println(str2);
}
}

【运行结果】

true
false
true
help!
hello

【后面的话】

将看到的、学到的东西写出来的感觉还是非常好的,一方面可以锻炼自己的思维能力,另一方面可以更加好的理解所学。

这几天看到了几句话分享一下:

  1. 你养兰花不是今天用来生气的。
  2. 昨日黄土陇头送白骨,今宵红灯帐底卧鸳鸯。
  3. 我认为这些真理是不言自明了,人人生来平等,造物主赋予他们一定的不可让与的权利,这些权利有生活的权利、自由的权利和追求幸福的权利。为了取得这些权利,人类创建了政府,政府则从被治理的同意中得到权利。任何政府形式一但有背这些目的,人民就有权改变或废除它,组织新的政府······

——《独立宣言》

——TT

Java学习笔记(一)——关于java中的String类的更多相关文章

  1. JavaSE学习笔记(5)---内部类和String类

    JavaSE学习笔记(5)---内部类和String类 一.内部类基础 转自菜鸟教程 ​ 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来 ...

  2. Java学习笔记心得——初识Java

    初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...

  3. Java学习笔记--继承和多态(中)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  4. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  5. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  6. Java学习笔记十九:Java中的访问控制修饰符

    Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...

  7. Java学习笔记之:Java简介

    一.引言 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. ...

  8. Java学习笔记之:Java 继承

    一.引言 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类 ...

  9. Java学习笔记之:Java String类

    一.引言 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String str= "Hello w ...

  10. Java学习笔记之:Java引用数据类型之字符串

    一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...

随机推荐

  1. Codeforces Round #337 (Div. 2) A水

    A. Pasha and Stick time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. 题解【luoguP1351 NOIp提高组2014 联合权值】

    题目链接 题意:给定一个无根树,每个点有一个权值.若两个点 \(i,j\) 之间距离为\(2\),则有联合权值 \(w_i \times w_j\).求所有的联合权值的和与最大值 分析: 暴力求,每个 ...

  3. 裸机配置C语言运行环境

    C语言程序的执行需要栈的支持.部分soc未初始化栈的情况下调用C语言程序会发生错误. start.S中一共配置了看门狗,svc栈,icache. 在x210中看门狗默认关闭,svc栈默认开启,icah ...

  4. Fixed: The Windows Process Activation Service service terminated with the following error: The system cannot find the file specified

    I'm not yet clear what I did, but I'm blogging it so it can be found if someone else has this issue. ...

  5. Django1.5 自定义用户模型(总结)

    Django系统有自带的超级棒的认证机制,但是默认的用户模型有一点捉急,为了自定义用户模型,看了很多相关的文章,这里做一个总结: 你可以先看一下这篇,对Django的用户模型有一个比较全的了解: 来自 ...

  6. ZooKeeper入门(四)

    入门:使用ZooKeeper的协调分布式应用 这个文档使你对ZooKeeper快速入门,它主要针对想尝试它的开发者.并且包含简单的单机的ZooKeeper服务的安装说明,一些验证是否运行的命令,和一个 ...

  7. C11简洁之道:模板改进

    1.  右尖括号 我们在C++98/03中使用泛型编程的时候,经常遇到“>>”被当作右移操作符,而不是模板参数的结尾.假如我们有如下代码: template <typename T& ...

  8. Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily

    功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1  302 ...

  9. 常见XSD问题

    < xs:elementname="status"> < xs:complexType> < xs:sequence> < xs:elem ...

  10. MVP应用在android app上

    使用MVP模式来解耦activity中业务代码和界面代码.在activity中,将其中的业务抽象到presenter层:将其中的界面代码抽象到View层. MVP模式: 一个软件被划分成三层,View ...