一、Java求余%的结果符号取决于除数的符号位;小数也可以求余,余数仍为小数。

 package com.test;

 public class Test {

     /**
* @author 容杰龙
*/
public static void main(String[] args) {
System.out.println(5/3); //
System.out.println(5%3); // System.out.println(-5/3); //-1
System.out.println(-5%3); //-2 System.out.println(-5/-3); //
System.out.println(-5%-3); //-2 System.out.println(5/-3); //-1
System.out.println(5%-3); //2 //浮点类型
System.out.println(20.5%2.5); //0.5
System.out.println(20.2%10.1); //0.0
System.out.println(10%2.); //0.0
System.out.println(-10.8%2); //-0.8000000000000007
System.out.println(20.168%-10.111); //10.056999999999999
System.out.println(20.168%10.111); //10.056999999999999 }
}

二、String对象的比较问题

A.String是不可变的,不能被继承。String类内部通过char数组来保存字符串,而这个char数组被声明为:final。String类的设计使用了不变模式。

B.String类的声明如下:

 public final class String implements java.io.Serializable, Comparable, CharSequence

C.数据区的三个部分:Java 虚拟机栈(可以简称为Java栈)、堆和运行时常量池(简称常量池)

D.常量池

  虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,包括直接常量(string,integer和floating point常量)和对其他类型、字段和方法的符号引用。字符串字面值会存储在常量池中。

  String x = "abc"; String y = new String("abcd");

  第一条语句没有在堆中分配内存,而是将“abc”保存在常量池中。对于第二条语句,同样会在常量池中有一个“abcd”的字符串,当new时,会拷贝一份该字符串存放到堆中,于是y指向了堆中的那个“abcd”字符串。

 package com.test;

 public class Test {
/**
* @author 容杰龙
*/
private static String a = "ab";
private static String ab = new String("ab");
public static void main(String[] args) {
/**
* 当两个字符串字面值连接时(相加),
* 得到的新字符串依然是字符串字面值,
* 保存在常量池中。
*/
String a1="abc123";
String a2="ab"+"c"+123;
System.out.println(a1==a2); //true
/**
* 当字符串字面值与String类型变量连接时,
* 得到的新字符串不再保存在常量池中,
* 而是在堆中新建一个String对象来存放。
* 很明显常量池中要求的存放的是常量,
* 有String类型变量当然不能存在常量池中了。
*/
String b1="abc123";
String b2="123";
String b3="abc"+b2;
System.out.println(b1==b3); //false
/**
* 此处是字符串字面值与String类型常量连接,
* 得到的新字符串依然保存在常量池中。
*/
String c1 = "ab";
final String c2 = "b";
String c3 = "a" + c2;
System.out.println(c1 == c3); //true
/**
* final String d2 = get123();
* 其实与final String d2 = new String(“123”);是一样的。
* 也就是说return “123”会在堆中创建一个String对象保存”123”,
* 虽然d2被定义成了final。可见并非定义为final的就保存在常量池中,
* 很明显此处d2常量引用的String对象保存在堆中,
* 因为get123()得到的String已经保存在堆中了,
* final的String引用并不会改变String已经保存在堆中这个事实。
*/
String d1 = "abc123";
final String d2 = get123();
String d3 = "abc" + d2;
System.out.println(d1 == d3);//false
/**
* intern()方法
* 返回字符串对象的规范化表示形式。
* 一个初始为空的字符串池,它由类 String 私有地维护。
* 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串
* (用 equals(Object) 方法确定),则返回池中的字符串。
* 否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
* 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,
* s.intern() == t.intern() 才为 true。
* 所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。
*
*/
String s1 = "a";
String s2 = "b";
String s = s1 + s2;
System.out.println(s == a);//false
System.out.println(s.intern() == a);//true
////////////////////////////////
String ss1 = "a";
String ss2 = "b";
String ss = ss1 + ss2;
System.out.println(ss == ab);//false
System.out.println(ss.intern() == ab);//false
System.out.println(ss.intern() == ab.intern());//true
} private static String get123() {
return "abc";
}
}

Java的一些细节问题的更多相关文章

  1. Java总结——常见Java集合实现细节(1)

    Java提高——常见Java集合实现细节(1) 2018年04月18日 15:07:35 阅读数:25 集合关系图 Set和Map set代表一种集合元素无序.集合元素不可重复的集合 map代表一种由 ...

  2. java 代码的细节优化

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用 ...

  3. java基础部分细节

    访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. 私有的,以  ...

  4. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

  5. Cordova插件中JavaScript代码与Java的交互细节介绍

    在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...

  6. 35个Java代码优化的细节,你知道几个?

    前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...

  7. Java 代码注意细节

    代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...

  8. java protected 的细节

    1. java的权限控制--大部分人都被错误洗脑了. 一个重大的坑,或者一个重大的误区,或者说一个洗脑了成千上万java编程者的错误概念就是: public private protected 是基于 ...

  9. 【Java】ThreadLocal细节分析

    ThreadLocal通过中文解释就是线程本地变量,是线程的一个局部变量.根据哲学家黑格尔“的存在即合理”的说法,ThreadLocal的出现肯定是有它的意义,它的出现也是因为多线程的一个产物.Thr ...

  10. java和python细节总结和java中string 的+操作

    //JAVA中对arrayList的初始化,能够分配空间,不能之间让一个ArrayList赋值给另外一个ArrayList,这样是引用赋值,当一个改变时候,另外一个也改变 List<String ...

随机推荐

  1. Hadoop分布式集群搭建_1

    Hadoop是一个开源的分布式系统框架 一.集群准备 1. 三台虚拟机,操作系统Centos7,三台主机名分别为k1,k2,k3,NAT模式 2.节点分布 k1: NameNode DataNode ...

  2. Dbshop v1.3任意用户密码重置漏洞

    0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...

  3. 嵌入式Linux 网络编程

    涉及到的数据结构: 下面首先介绍两个重要的数据类型:sockaddr和sockaddr_in,这两个结构类型都是用来保存socket地址信息的 定义如下所示: struct sockaddr { un ...

  4. leetcode记录-罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  5. tarjan 强连通分量

    一.强连通分量定义 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly c ...

  6. 20155328 《Java程序设计》实验一(Java开发环境的熟悉) 实验报告

    20155328 <Java程序设计>实验一(Java开发环境的熟悉) 实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发: 打开windows ...

  7. 2017-2018-1 20155330《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155330<信息安全技术>实验二--Windows口令破解 姓名:朱玥 学号:20155330 班级:201553 日期:2017.10.24 实验环境 系统 ...

  8. WPF中使用WindowChrome自定义窗口中遇到的最大化问题

    FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shel ...

  9. java list根据id获取子节点

    工作中因业务需求,将数据库中的树状结构的数据根据父节点获取所有的子节点 实现思路 1.获取整个数据的list集合数据 2.将数据分组,java8 list有groupby分组,java8之前的自己遍历 ...

  10. Iterable/Iterator傻傻分不清

    区别可迭代对象和迭代器 1.判断是否可以迭代 from collections import Iterabledef fid(times): n = 0 a , b = 0,1 while n < ...